MySQL 엔진 아키텍처
- MySQL 서버는 다른 DBMS에 비해 구조가 상당히 독특함
InnoDB 스토리지 엔진 아키텍처
- InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반 잠금을 제공
- 이는 높은 동시성 처리, 안정성, 높은 성능을 지원
- 프라이머리 키에 의한 클러스터링
- 외래 키 지원
- 데이터가 있는지 확인을 위해 잠금이 여러 테이블에 전파됨
- 이로 인해 데드락이 발생할 때가 많으므로 주의해서 사용
foreign_key_checks
옵션
- MVCC(Multi Version Concurrency Control)
- 레코드 레벨의 트랜잭션을 지원하는 DBMS가 지원하는 기능
- 가장 큰 목적은 잠금없이 일관된 읽기를 제공하기 위함
- InnoDB는 Undo log 기반으로 기능 구현
- 잠금 없는 일관된 읽기(Non-Locking Consistent Read)
- InnoDB 스토리지 엔진은 MVCC 기술을 이용해 잠금을 걸지않고 읽기 작업 수행
- 격리 수준이 SERIZLIZABLE이 아닌경우 INSERT와 연결되지 않은 순수한 읽기(SELECT)는 대기 없이 바로 실행
- 이를 잠금 없는 읽기라고 표현함
- 변경전 데이터를 읽기 위해 Undo log사용
- 자동 데드락 감지
- InnoDB 스토리지 엔진은 내부적으로 잠금이 교착 상태에 빠지지 않았는지 체크하기 위해 잠금 대기 목록을 그래프(Wait-for List) 현태로 관리
- 데드락 감지 스레드가 주기적으로 잠금 대기 그래프를 검사해 교착 상태에 빠진 트랙잭션들으 찾고 그중 하나를 강제 종료
- 자동화된 장애 복구
- InnoDB 버퍼 풀
- Double Write Buffer
- 언두 로그
- 체인지 버퍼
- 어댑티브 해시 인덱스
MyISAM 스토리지 엔진 아키텍처
MySQL 로그 파일
References