innodb

Database/MySQL

InnoDB가 Phantom Read를 피하는 법

Real MySQL 복습을 진행하면서 가볍게 읽고 넘어갔지만 원리가 궁금해진 부분이 생겼다. InnoDB 스토리지 엔진에서는 갭 락과 넥스트 키 락을 어떻게 사용하길래 REPEATABLE READ 격리 수준에서도 팬텀 리드가 발생하지 않을까? 이 궁금증을 해소하고자 한다. REPEATABLE READ, 갭락과 넥스트 키 락에 대한 내용은 아래 포스팅에서 확인할 수 있다. https://devdebin.tistory.com/252 트랜잭션과 잠금 2023.10.9 복습 리팩토링 시작 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 즉, 정합성을 보장하기 위한 기능이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 devdebin.tistory.com 팬텀 리드 팬텀 리드란 다른 ..

Database/MySQL

클러스터링 인덱스

클러스터링이란 여러 개를 하나로 묶는다는 의미로 주로 사용되는데, 지금 설명하고 자하는 인덱스의 클러스터링도 그 의미를 크게 벗어나지 않는다. MySQL 서버에서 클러스터링은 테이블의 레코드를 비슷한 것(프라이머리 키를 기준으로)들끼리 묶어서 저장하는 형태로 구현되는데, 이는 주로 비슷한 값들을 동시에 조회하는 경우가 많다는 점에 착안한 것이다. MySQL에서 클러스터링 인덱스는 InnoDB 스토리지 엔진에서만 지원하며, 나머지 스토리지 엔진에서는 지원되지 않는다. 클러스터링 인덱스 클러스터링 인덱스는 테이블의 프라이머리 키에 대해서만 적용되는 내용이다. 즉 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 표현한다. 여기서 중요한 것은 프라이머리 키 값에 의해 레코드의 저..

Database/MySQL

B-Tree 인덱스 2편

B-Tree 인덱스를 통한 데이터 읽기 어떤 경우에 인덱스를 사용하게 유도할지, 또는 사용하지 못하게 할지 판단하려면 각 스토리지 엔진이 어떻게 인덱스를 이용(경유)해서 실제 레코드를 읽어 내는지 알아야 한다. 인덱스 레인지 스캔 인덱스 레인지 스캔은 인덱스의 접근 방법 가운데 가장 대표적이며, 앞으로 나올 두 가지 접근 방식보다 빠른 방법이다. 인덱스를 통해 레코드를 한 건만 읽는 경우와 한 건이상을 읽는 경우를 각각 다른 이름으로 구분하지만, 이번에는 모두 묶어서 인덱스 레인지 스캔이라고 표현했다. 인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. 검색하려는 값의 수나 결과 레코드 건수와 관계 없이 레인지 스캔이라고 표현한다. 루트 노드에서부터 비교를 시작해 브랜치 노..

Database/MySQL

InnoDB 스토리지 아키텍처

2023.10.10 복습 리팩토링 시작 InnoDB 스토리지 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하며, 그 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. 이제 InnoDB 스토리지 엔진의 주요 특징들과 함께 아키텍처를 살펴보자. 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장된다. 즉 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리될 수 있다. 결..

Debin
'innodb' 태그의 글 목록