피드로 돌아가기
blktrace analysis of MySQL doublewrite buffer contention
Dev.toDev.to
Database

Buffer Pool 확장 및 O_DIRECT 도입으로 I/O Stall 4.5초 제거

blktrace analysis of MySQL doublewrite buffer contention

Risky Egbuna2026년 4월 11일13advanced

Context

NVMe 스토리지 공유 환경에서 ImageMagick의 대량 이미지 생성 작업으로 인한 Block I/O 포화 상태 발생. 128MB의 협소한 InnoDB Buffer Pool 설정으로 인해 Dirty Page가 급증하며 Free Buffer가 고갈되는 구조적 한계 노출.

Technical Solution

  • innodb_buffer_pool_size를 4G로 확장하여 Dirty Page 누적 공간 확보 및 동기식 Flush 발생 빈도 억제
  • innodb_flush_method를 O_DIRECT로 설정하여 OS Page Cache를 우회하고 File System Journaling으로 인한 I/O 병목 제거
  • innodb_io_capacity 및 max 값을 상향 조정하여 NVMe 하드웨어 성능에 맞게 I/O 처리량 최적화
  • innodb_page_cleaners를 4개로 늘려 Flush List의 Dirty Page를 더 빠르게 비동기적으로 처리하는 구조 설계
  • Query Thread가 직접 Page를 Flush 하는 innodb_buffer_pool_wait_free 이벤트를 원천 차단하여 요청 처리 지연 해소

- DB와 대량 파일 쓰기 프로세스가 동일 디스크를 사용하는지 확인 - SHOW ENGINE INNODB STATUS를 통해 Free buffers 0 및 Modified db pages 비율 모니터링 - NVMe 사용 시 innodb_io_capacity가 하드웨어 성능에 맞게 설정되었는지 검토 - OS Page Cache 이중 버퍼링 방지를 위해 O_DIRECT 설정 적용 여부 확인

원문 읽기