InnoDB 아키텍처 (with. In-memory structues)

cooper·2023년 10월 26일
0
post-thumbnail

1. 쿼리 실행 구조

(1) MySQL Engine

  • 역할
    • 쿼리의 실행 계획을 수립해 handler(e.g. storage engine) 로 전달하는 역할
  • 구조
    • 쿼리 파서 : 문법 체크 + 파서 트리 만들기
    • 전처리기 : 파서 트리의 구조 문제 파악
    • 옵티마이저 : 실행 계획 수립
    • 실행 엔진 : 실행 계획대로 각 핸들러의 요청 결과를 연결해 사용자에게 전달 (DispatcherServlet 과 같은 역할)

(2) Storage Engine (handler)

  • 역할
    • 실행 엔진의 요청에 따라 데이터를 디스크 저장 또는 조회하는 담당
  • 구조
    1. In-memory structure
      1. InnoDB buffer pool
        • Adaptive Hash Index
        • Change Buffer
      2. Log Buffer
    2. On-Disk Structure
      1. System Tablespace
      • Doublewrite Buffer Files
      • Undo Tablespaces
      • RedoLog Files
      • File-Per-Table Tablespaces
      • General Tablespaces
      • Temporary Tablespaces

(출처 : RealMySQL 4장. 아키텍처)


2. InnoDB 기능

  1. PK 기반 클러스터링 인덱스 지원
    • PK 기반 순서대로 저장
    • PK 기반 레인지 스캔은 빠르게 처리됨
  2. 외래키 지원
    • 데이터 변경 시 데이터 체크 작업 필요 → 잠금이 여러 테이블에 전파 → 데드락 위험 ↑
    • foreign_key_checks : 외래키 체크 작업 ON/OFF 시스템 변수
  3. MVCC 기능 지원
    1. 언두 로그
      • 장점
        1. 트랜잭션 보장
        2. 격리 수준 보장
  4. 자동 데드락 감지
  5. 장애 복구 자동화
  6. 쓰기 지연 기능 (by. buffer pool)

MySQL 엔진이 각 스토리지 엔진에게 데이터를 읽어오거나 저장하도록 명령 하려면 반드시 핸들러를 통해야 한다.


3. InnoDB 구조

  1. In-memory Structures
    • Buffer Pool
      • Adaptive Hash Index (자주 접근하는 컬럼 내용에 관한 인덱스)
      • Change Buffer (Secondary Index 변경 내용 버퍼링)
    • Log buffer (Redo Log 변경 내용 버퍼링)
  2. On-Disk Structures
    • DoubleWrite Buffer(플러시 이전에 더티 페이지들을 묶어 관리해 장애 복구에 사용)

(1) In-memory Structures

  • Buffer Pool
    • Adaptive Hash Index
    • Change Buffer
  • Log buffer

  1. Buffer Pool
    • 테이블 및 인덱스 데이터 캐싱을 목적으로 하는 메인 메모리 영역
    • 장점 : 쓰기 작업 지연, 장애 복구 (with. Double Write Buffer)
    • 구성 : Data Page, Index Page, Undo Page, Lock Info, Change Buffer
      • 언두 로그?
        • 데이터의 변경 이력을 저장하는 공간 (MVCC)
        • 장점 : 트랜잭션 보장, 격리 수준 보장
  2. Adaptive Hash Index
    1. 역할
      • 자주 사용되는 컬럼을 해시로 정의하여 B-Tree Index 대신 직접 Data 에 엑세스 가능
    2. 장점
      • Tx 기능 or 신뢰성 저하 없이 In-memory Database 와 같은 작업 성능을 낸다.
  3. Change Buffer (구 : Insert Buffer)
    1. 역할
      • Secondary Index Page 의 변경 내용을 캐싱하기 위한 임시 공간
    2. 동작 과정
      1. 변경할 Secondary Index Page 가 Buffer Pool 에 존재할 경우, 바로 메모리 내 변경 가능
      2. 변경할 Secondary Index Page 가 Buffer Pool 에 없는 경우, 변경 내역만 Change Buffer 에 저장, 향 후 disk 에 플러시
  4. Log Buffer (구 : Redo Log Buffer)
    1. 역할
      • Redo Log 파일에 기록할 Data 를 보관하는 메모리 영역
        • Redo Log?
          • 완료되지 않는 Tx 에 의해 변경된 Data 를 적용하기 위해 사용
    2. 동작 과정
      1. Buffer Pool 의 데이터를 변경할 때 먼저 변경사항을 Log Buffer 에 기록
      2. 설정 주기 혹은 Tx commit 시점에 디스크와 동기화

undo log 와 redo log 차이

  1. undo log : 트랜잭션 보장과 격리 수준에 맞는 일관성있는 데이터 읽기를 위한 단일 Tx 에 관한 레코드 모임 (for. MVCC)
  2. redo log : Crash Recovery 수행 시 완료되지 않은 트랜잭션에 의해 변경된 Data 적용하기 위함. (for. 데이터 동기화)

References

  1. RealMySQL 4장 아키텍처
  2. [DB 인사이드] MySQL Architecture - 6. InnoDB : In-Memory Structure
profile
막연함을 명료함으로 만드는 공간 😃

0개의 댓글