Mysql/MySQL 아키텍처 심층 분석

InnoDB Storage Engine 상세

DEVLIB 2025. 4. 18. 15:48
728x90

InnoDB Storage Engine 심층 분석

InnoDBMySQL의 기본 스토리지 엔진입니다.
ACID 트랜잭션Crash Recovery, 외래키(Foreign Key) 지원이 특징이며,
대규모 트래픽 시스템에서도 견디도록 설계되어 있습니다.


1. InnoDB 아키텍처 개요

+---------------------------+
| Connection Threads        |
+---------------------------+
| Query Processing Layer    |
+---------------------------+
| InnoDB Storage Engine     |
|  ├── Buffer Pool          |
|  ├── Transaction System   |
|  ├── Locking System       |
|  ├── Insert/Change Buffer |
|  ├── Doublewrite Buffer   |
|  ├── Adaptive Hash Index  |
|  └── Background Threads   |
+---------------------------+
| Storage Layer (Data Files)|
+---------------------------+

2. InnoDB의 주요 컴포넌트

2.1 Buffer Pool

  • 메모리 상에서 데이터 페이지, 인덱스 페이지, Undo 로그 등을 캐싱
  • 디스크 IO를 줄여 성능 최적화
  • 내부적으로 LRU 관리, Flush 관리 수행
  • 세부 설명은 앞에서 다뤘던 것처럼 Instance/Chunk 구조 존재

2.2 Transaction System

  • ACID 보장 (Atomicity, Consistency, Isolation, Durability)
  • Undo Logs 이용: 롤백, MVCC 구현
  • Redo Logs 이용: 시스템 장애 시 복구 가능
  • 트랜잭션 Isolation Levels:
    • READ UNCOMMITTED
    • READ COMMITTED
    • REPEATABLE READ (MySQL 기본값)
    • SERIALIZABLE

MySQL InnoDB는 MVCC (Multi-Version Concurrency Control) 로 동시성을 극대화합니다.


2.3 Locking System

  • Record Lock: 특정 레코드에 대한 Lock
  • Gap Lock: 레코드 사이의 간격(Gap)에 Lock 설정 (Phantom Read 방지)
  • Next-Key Lock: Record Lock + Gap Lock 조합
  • Intent Lock: 테이블 수준 의도 Lock
  • Auto-Increment Lock: 자동 증가 컬럼 관리용

Deadlock 감지 및 자동 해결 기능 탑재


2.4 Insert Buffer (Change Buffer)

  • 보조 인덱스(Secondary Index) 수정 작업을 메모리에 임시 저장
  • 디스크 Random IO를 줄여서 Write 성능 향상
  • 백그라운드 스레드가 비동기적으로 Merge 수행

주요 포인트

  • Primary Key는 Insert Buffer 적용 X
  • Secondary Index만 적용 O
  • 설정: innodb_change_buffering

2.5 Doublewrite Buffer

데이터 손상 방지 메커니즘

  • InnoDB는 데이터를 디스크에 쓸 때 두 번 기록
    1. 먼저 Doublewrite Buffer에 기록
    2. 이후 실제 데이터 파일(.ibd)로 기록
  • 서버 장애 발생 시, Doublewrite 영역을 통해 복구 가능

장점:

  • Torn Page 방지 (Partial Write 발생해도 복구 가능)

단점:

  • 추가 디스크 쓰기 오버헤드 발생 (하지만 안정성 이득이 더 큼)

2.6 Adaptive Hash Index (AHI)

  • 자주 조회되는 페이지를 감지해 메모리 내 해시 인덱스를 자동 생성
  • 테이블 스캔 대신 해시 검색으로 성능 대폭 향상 가능
  • 자동으로 생성/삭제 관리
  • 설정: innodb_adaptive_hash_index

주의:

  • Lock 경합(Contestion) 이슈가 있을 경우 AHI를 비활성화하는 경우도 있음

2.7 Background Threads

  • Page Cleaner Thread: Dirty Page를 디스크에 플러시
  • Purge Thread: 오래된 Undo 레코드 정리
  • IO Thread: 디스크 읽기/쓰기 비동기 처리
  • Lock Monitor Thread (디버깅용)

Background Thread 최적화는 대규모 트래픽 시스템에서는 필수입니다.


3. InnoDB 데이터 저장 구조

항목 설명
Tablespace 테이블/인덱스를 저장하는 물리적 공간 (.ibd 파일)
Segment Index, Data, Undo 데이터로 세분화된 관리 단위
Extent 64개의 연속된 페이지 묶음 (1MB)
Page 데이터 저장의 기본 단위 (16KB 기본)
Record Page 안에 저장되는 실제 데이터 레코드

요약 흐름:

Tablespace
  └── Segment
       └── Extent
            └── Page
                 └── Record

InnoDB 특화 기능 요약

기능 설명
MVCC 비잠금 읽기(Non-locking Read) 지원
Foreign Key Constraints 데이터 무결성 보장
Crash Recovery 장애 발생 시 Redo Log, Doublewrite Buffer로 자동 복구
Hot Online DDL 일부 DDL 작업 중에도 시스템 사용 가능 (8.0 이상 강화)

운영 관점 주요 파라미터 요약

변수 설명
innodb_buffer_pool_size Buffer Pool 크기
innodb_log_file_size Redo Log 파일 크기
innodb_flush_log_at_trx_commit 트랜잭션 커밋시 Redo 플러시 정책
innodb_change_buffering Change Buffer 사용 여부
innodb_adaptive_hash_index AHI 기능 활성화 여부
LIST