1. 쿼리 실행 구조
(1) MySQL Engine
- 역할
- 쿼리의 실행 계획을 수립해
handler(e.g. storage engine
) 로 전달하는 역할
- 구조
쿼리 파서
: 문법 체크 + 파서 트리 만들기
전처리기
: 파서 트리의 구조 문제 파악
옵티마이저
: 실행 계획 수립
실행 엔진
: 실행 계획대로 각 핸들러의 요청 결과를 연결해 사용자에게 전달 (DispatcherServlet 과 같은 역할)
(2) Storage Engine
(handler)
- 역할
- 실행 엔진의 요청에 따라 데이터를 디스크 저장 또는 조회하는 담당
- 구조
- In-memory structure
- InnoDB buffer pool
- Adaptive Hash Index
- Change Buffer
- Log Buffer
- On-Disk Structure
- System Tablespace
- Doublewrite Buffer Files
- Undo Tablespaces
- RedoLog Files
- File-Per-Table Tablespaces
- General Tablespaces
- Temporary Tablespaces
(출처 : RealMySQL 4장. 아키텍처)
2. InnoDB 기능
- PK 기반 클러스터링 인덱스 지원
- PK 기반 순서대로 저장
- PK 기반 레인지 스캔은 빠르게 처리됨
- 외래키 지원
- 데이터 변경 시 데이터 체크 작업 필요 → 잠금이 여러 테이블에 전파 → 데드락 위험 ↑
foreign_key_checks
: 외래키 체크 작업 ON/OFF 시스템 변수
- MVCC 기능 지원
- 언두 로그
- 자동 데드락 감지
- 장애 복구 자동화
- 쓰기 지연 기능 (by. buffer pool)
MySQL 엔진이 각 스토리지 엔진에게 데이터를 읽어오거나 저장하도록 명령 하려면 반드시 핸들러를 통해야 한다.
3. InnoDB 구조
- In-memory Structures
- Buffer Pool
- Adaptive Hash Index (자주 접근하는 컬럼 내용에 관한 인덱스)
- Change Buffer (Secondary Index 변경 내용 버퍼링)
- Log buffer (Redo Log 변경 내용 버퍼링)
- On-Disk Structures
- DoubleWrite Buffer(플러시 이전에 더티 페이지들을 묶어 관리해 장애 복구에 사용)
(1) In-memory Structures
- Buffer Pool
- Adaptive Hash Index
- Change Buffer
- Log buffer
- Buffer Pool
- 테이블 및 인덱스 데이터 캐싱을 목적으로 하는 메인 메모리 영역
- 장점 : 쓰기 작업 지연, 장애 복구 (with. Double Write Buffer)
- 구성 :
Data Page
, Index Page
, Undo Page
, Lock Info
, Change Buffer
- 언두 로그?
- 데이터의 변경 이력을 저장하는 공간 (MVCC)
- 장점 : 트랜잭션 보장, 격리 수준 보장
- Adaptive Hash Index
- 역할
- 자주 사용되는 컬럼을 해시로 정의하여 B-Tree Index 대신 직접 Data 에 엑세스 가능
- 장점
- Tx 기능 or 신뢰성 저하 없이 In-memory Database 와 같은 작업 성능을 낸다.
- Change Buffer (구 : Insert Buffer)
- 역할
Secondary Index Page
의 변경 내용을 캐싱하기 위한 임시 공간
- 동작 과정
- 변경할 Secondary Index Page 가 Buffer Pool 에 존재할 경우, 바로 메모리 내 변경 가능
- 변경할 Secondary Index Page 가 Buffer Pool 에 없는 경우, 변경 내역만 Change Buffer 에 저장, 향 후 disk 에 플러시
- Log Buffer (구 : Redo Log Buffer)
- 역할
Redo Log
파일에 기록할 Data 를 보관하는 메모리 영역
- Redo Log?
- 완료되지 않는 Tx 에 의해 변경된 Data 를 적용하기 위해 사용
- 동작 과정
- Buffer Pool 의 데이터를 변경할 때 먼저 변경사항을 Log Buffer 에 기록
- 설정 주기 혹은
Tx commit
시점에 디스크와 동기화
undo log 와 redo log 차이
- undo log : 트랜잭션 보장과 격리 수준에 맞는 일관성있는 데이터 읽기를 위한 단일 Tx 에 관한 레코드 모임 (for. MVCC)
- redo log : Crash Recovery 수행 시 완료되지 않은 트랜잭션에 의해 변경된 Data 적용하기 위함. (for. 데이터 동기화)
References
- RealMySQL 4장 아키텍처
- [DB 인사이드] MySQL Architecture - 6. InnoDB : In-Memory Structure