아키텍처

MySQL 엔진 아키텍처

  • MySQL 서버는 다른 DBMS에 비해 구조가 상당히 독특함

InnoDB 스토리지 엔진 아키텍처

inno-storage-architecture

  • 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) 현태로 관리
    • 데드락 감지 스레드가 주기적으로 잠금 대기 그래프를 검사해 교착 상태에 빠진 트랙잭션들으 찾고 그중 하나를 강제 종료
      • Undo log가 적은 트랜잭션이 롤백 대상
  • 자동화된 장애 복구
  • InnoDB 버퍼 풀
  • Double Write Buffer
  • 언두 로그
  • 체인지 버퍼
  • 어댑티브 해시 인덱스

MyISAM 스토리지 엔진 아키텍처

MySQL 로그 파일

References