InnoDB
[MySQL] 트랜잭션과 잠금
Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 트랜잭션 트랜잭션이란 데이터베이스에서 더 이상 쪼갤 수 없는 작업의 최소 단위이다. 이 작업 안의 연산들은 모두 반영되거나(commit) 모두 반영되지 않아야 한다(rollback). MySQL의 격리 수준 여러 트랜잭션이 동시에 처리되고 있을때, 트랜잭션 간의 데이터의 조회, 변경에 대한 고립 정도를 나타내는 것을 격리 수준이라고 한다. READ UNCOMMITTED 각 트랜잭션이 commit, rollback 여부와 관계 없이 다른 트랜잭션의 값을 읽을 수 있다. 이름그대로 커밋되지 않은 데이터를 읽을 수 있는 격리 수준을 뜻한다. 이로 인해 Dirty Read 현상이 일어나게 된다. Dirty Read 완료되지 않은 트랜잭션의 데..
[MySQL] MySQL 엔진 아키텍처
Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. MySQL 엔진 아키텍처 MySQL 엔진 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 처리를 수행한다. MySQL엔진은 커넥션 핸들러, SQL 파서, 전처리기, 옵티마이저로 구성되어 있다. 또한 MySQL은 표준 SQL 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다. 스토리지 엔진 디스크 스토리지에 실제 데이터를 저장하고 읽어오는 부분을 전담한다. 하나의 MySQL 서버에서 MySQL 엔진은 하나이지만, 스토리지 엔진은 여러개를 동시에 사용할 수 있다. 각 스토리지 엔진은 성능 향상을 위해 키 캐시나 InnoDB 버퍼 풀 같은 기능을 내장하고 있다. 핸들러 A..
[MySQL] InnoDB의 B-Tree Index
Real MySQL 8.0 읽으면서 배웠던 부분들을 정리한 글입니다. 디스크 읽기 방식 컴퓨터에서 CPU나 메모리 같은 전자식 장치와 달리 기계적 장치인 디스크는 상대적으로 속도가 느리다. 따라서 디스크 I/O 감소가 데이터베이스 성능 튜닝에 많은 영향을 주게 된다. HDD와 SSD의 차이점 이러한 기계식 하드디스크 드라이브를 대체하기 위해 전자식 저장 매체인 SSD가 많이 출시되고 있다. 또한 SSD도 하드 디스크 드라이브와 같은 인터페이스(SATA, SAS)를 지원하므로 내장 디스크나 DAS 또는 SAN에 그대로 사용할 수 있다. 원판을 기계적으로 회전시키는 하드디스크와 달리 SSD는 플래시 메모리를 사용하므로 상대적으로 데이터를 빨리 읽고 쓸 수 있다. 디스크의 헤더를 움직이지 않고 한 번에 많은 ..