전체 글

꾸준하게 열심히..
📚 Databases/RealMySQL 8.0

8.3 B-Tree 인덱스

인덱싱 알고리즘 중 가장 일반적으로 사용되는 알고리즘. B는 Binary의 약자가 아닌, Balanced의 약자이다. 8.3.1 구조 및 특성 B-Tree의 구조 제일 상단에 있는 루트 노드, 중간에 있는 브랜치 노드, 가장 마지막에 있는 리프 노드가 있다. 리프 노드는 항상 실제 데이터 레코드를 찾아가기 위한 주소값을 가지고 있다. 인덱스들은 모두 정렬이 된 상태로 저장이 되어 있다. 실제 디스크의 저장된 데이터 파일의 레코드는 정렬되어있지 않다. 엄밀히 말하면, InnoDB에서는 레코드가 클러스터되어 저장되기 때문에 기본적으로 PK 순서로 정렬되어 저장된다. 데이터 레코드 구조 (InnoDB) 리프 노드와 데이터 파일의 구조를 자세하게 살펴보자. 데이터 파일에는 결국 PK를 저장하고 있는 B-Tree..

📚 Databases/RealMySQL 8.0

8.1 데이터베이스 인덱스란?

8.1 디스크 읽기 방식 HDD vs SSD 순차 I/O 방식은 사실 SSD가 HDD보다 조금 빠르거나 거의 비슷한 성능을 보인다. 하지만, 랜덤 I/O에서는 대략 5000배 정도 빠르다. 랜덤 I/O, 순차 I/O란? 순차 I/O는 데이터를 디스크에 저장하기 위해 데이터를 모아서 1 번 시스템에게 요청을 한다. 즉, 디스크 헤더를 1 번 움직였다. 랜덤 I/O는 각각의 데이터를 저장할 때마다 시스템에게 요청을 한다. 즉, 디스크 헤더를 n 번 움직였다. 결국, 순차 I/O는 랜덤 I/O보다 거의 3배정도 빠르다. 💡 디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 의해 결정된다고 볼 수 있다. 일반적으로, 쿼리를 튜닝하는 것은 랜덤 I/O를 줄이기 위함이다. 8..

⚙️ Devops/🐳 Docker

Docker Permission Denied 해결방법

도커 권한 문제 일반 유저가 도커 명령어를 사용할 때마다 Permission Denied가 떠서 sudo를 사용해야하는 불편함이 있습니다. 이때 해결방법은 여러가지가 있습니다. 제가 알아본 2가지 방법에 대해서 알아보겠습니다. 현재 사용자를 그룹에 추가 현재 로그인 된 유저를 docker 그룹에 추가하는 것으로 sudo 권한 없이 실행할 수 있습니다. sudo usermod -aG docker $USER logout # 로그아웃 후 다시 로그인 후 적용 하지만 위 방법은 써드파티(jenkins 등) 유저에 대해서는 적용이 어려웠습니다. docker.sock Docker CLI(도커 커맨드들)는 결국 docker.sock을 통해서 명령을 실행합니다. 그래서 docker.sock의 권한을 수정해주면 됩니다...

📚 Databases/RealMySQL 8.0

5.4 MySQL의 격리 수준

트랜잭션의 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. 크게 4가지로 나뉜다. READ UNCOMMITED (=DIRTY READ) 거의 사용하지 않는다. READ COMMITED Oracle 같은 DBMS에서 주로 사용 REPEATABLE READ MySQL에서 사용 SERIALIZABLE 동시성이 중요한 데이터베이스에서는 거의 사용되지 않는다. 아래로 내려갈 수록 트랜잭션 간 데이터 격리(고립) 정도가 높아지며, 동시 처리 성능은 낮아진다. 하지만, SERIALIZABLE이 아닌 나머지 3개는 크게 성능의 개선이나 저하는 발생하지 않는다. 5.4.1 READ ..

⚙️ Devops/⛏ Git

GitLab CI/CD 구성하기

목표 GitLab에서 CI/CD를 하는 것 개발 환경 HOST Mac OS X SERVER Ubuntu 20.04 LTS GitLab Version : v14.5.0 Docker version 20.10.17, build 100c701 Gitlab Runner 설치 💡 Gitlab 버전과 Gitlab-Runner의 버전을 꼭 일치시켜주세요! Docker로 설치하기 docker run -d --name gitlab-runner-v14.5.0 \\ --restart always \\ --volume /srv/gitlab-runner/config:/etc/gitlab-runner: \\ --volume /var/run/docker.sock:/var/run/docker.sock \\ gitlab/gitlab-r..

📚 Databases/RealMySQL 8.0

5.3 InnoDB 스토리지 엔진 잠금

5.3 InnoDB 스토리지 엔진 잠금 InnoDB 스토리지 엔진은 MySQL과 별개로 잠금을 제공한다. 💡 스토리지 엔진 내부에서 레코드 기반의 잠금 방식을 탑재하고 있다. 5.3.1 InnoDB 스토리지 엔진의 잠금 InnoDB 스토리지 엔진은 레코드 기반의 잠금 을 제공하며, 잠금 정보가 상당히 작은 공간으로 관리되기 때문에 *락 에스컬레이션(레코드 락이 페이지 락으로, 또는 테이블 락으로 레벨업되는 경우)되는 경우는 없다. 또한 InnoDB에서는 특징인 레코드와 레코드 사이의 간격을 잠그는 갭(GAP) 락이라는 것이 존재한다. 점선으로 표시된 것은 존재하지 않는 레코드를 뜻한다. 5.3.1.1 레코드 락 레코드 자체만을 잠그는 것을 *레코드 락이라고 한다. 레코드 ? 레코드란 테이블의 한 데이터의..

iseunghan
iseunghan