tech/database

[mysql] 업데이트시 innodb buffer pool, redo log, disk io 동작에 관하여

daniel_lab 2025. 3. 26. 11:16

 

 

InnoDB에서 UPDATE의 내부 동작 순서

  1. UPDATE 실행 시 해당 row가 속한 페이지를 Buffer Pool로 로딩
    • 페이지 단위(기본 16KB)
    • 작은 컬럼 하나만 바꿔도, 그 row가 있는 페이지 전체가 메모리로 올라옴
  2. 변경 적용 (메모리 내에서)
    • 실제 데이터를 수정하고
    • 해당 페이지는 "Dirty Page" 로 표시됨
  3. Redo Log에 변경 내용 기록 (WAL - Write Ahead Logging)
    • 변경 직후 Redo Log에 먼저 기록
    • 이건 충돌 시 복구
    • 이때 디스크에는 아직 안 씀
  4. Undo Log에도 기록 (MVCC / Rollback용)
  5. Checkpoint 또는 flush 조건 만족 시 디스크에 기록
    • 일정 시간이나 페이지 수, Redo Log 크기 초과 등 조건에 따라
    • Dirty Page를 디스크로 flush하여 실제 데이터 파일에 기록됨

 

작은 컬럼 하나만 바꿔도,
그 컬럼이 속한 페이지 전체가 Buffer Pool에 올라가고,
Dirty 체크 → Redo Log 기록 → 조건 충족 시 디스크 반영