한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L12 데이터베이스

체크포인트·로그 플러시 Checkpoint / log flush stalls

원인 ID db-checkpoint · 주 담당 인프라팀·DB 인프라

그림과 실험이 있는 원본 카드로 열기 →

DB가 메모리의 변경분을 주기적으로 디스크에 몰아서 쓰는 순간 쿼리가 느려집니다.

왜 변경분이 쌓여 주기적으로 디스크에 기록 → 그러면 그 순간 디스크가 바빠져 쿼리 지연 → 화면에서는 주기적으로 저장·로딩이 느려짐

증상
입력 지연, 뚝뚝 끊김
요인
지연
누가 겪나
서버 전체, 특정 기능만
언제
일정한 주기로
담당
주 담당 인프라팀·DB 인프라
인프라팀 할 일
체크포인트를 잘게 나눠 고르게, 트랜잭션 로그(redo 로그, WAL)를 넉넉하게, 빠른 디스크.
그래프에서는
일정 주기로 튐 · DB 쿼리 지연, 디스크 쓰기량
확인할 곳
PostgreSQL은 log_checkpoints(최근 버전은 기본으로 켜짐) 로그의 체크포인트 시각과 쓴 버퍼 수, 체크포인트 횟수(17 이후 pg_stat_checkpointer의 num_timed·num_requested, 16 이하 pg_stat_bgwriter의 checkpoints_timed·checkpoints_req), checkpoint_warning 경고를 봄. MySQL은 SHOW ENGINE INNODB STATUS의 LOG 섹션에서 Log sequence number와 Last checkpoint at의 차이를 봄. 서버의 디스크 쓰기량·쓰기 지연을 함께 겹침
이러면 맞음
쿼리 지연이 튄 시각이 체크포인트 시각과 겹치고 그때 디스크 쓰기량과 쓰기 지연이 솟음. PostgreSQL에서 요청 체크포인트(num_requested)가 시간 체크포인트(num_timed)보다 훨씬 많으면 WAL이 max_wal_size에 자주 닿아 체크포인트가 앞당겨지는 것으로 봄
이러면 아님
체크포인트 시각과 무관한 주기로 튀면 백업·배치(dk-backup, db-batch)
확인 수단
인프라 도구로 확인(게임 코드 불필요)
더 알아보기
변경 기록을 담는 트랜잭션 로그(MySQL의 redo 로그, PostgreSQL의 WAL)를 너무 작게 잡으면, 로그가 찰 때마다 DB가 급하게 체크포인트를 몰아 하느라 쓰기 처리량이 잠깐씩 크게 떨어집니다.

출처

  1. WAL Configuration (PostgreSQL Documentation) PostgreSQL
    체크포인트는 기본 5분 또는 WAL 1GB(max_wal_size)마다, 더티 페이지를 모두 써서 비쌈. checkpoint_completion_target으로 쓰기를 나눠 I/O 폭주를 피함. 체크포인트 간격이 checkpoint_warning보다 짧으면 max_wal_size를 늘리라는 경고를 로그에 남김
  2. Configuring Buffer Pool Flushing MySQL
    redo 로그가 차면 급한(sharp) 체크포인트로 처리량이 잠깐 떨어짐, 적응형 플러시로 고르게 나눠 씀
  3. Error Reporting and Logging (PostgreSQL Documentation) PostgreSQL
    log_checkpoints: 체크포인트마다 쓴 버퍼 수와 걸린 시간을 로그에 남김, 기본 켜짐
  4. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    pg_stat_checkpointer의 num_timed(시간이 되어 한 체크포인트)·num_requested(요청된 체크포인트)
  5. PostgreSQL 17 Release Notes PostgreSQL
    pg_stat_checkpointer 신설, 체크포인트 관련 열을 pg_stat_bgwriter에서 옮김
  6. The Cumulative Statistics System (PostgreSQL 16 Documentation) PostgreSQL
    16까지는 pg_stat_bgwriter의 checkpoints_timed·checkpoints_req
  7. InnoDB Standard Monitor and Lock Monitor Output MySQL
    LOG 섹션: 현재 로그 시퀀스 번호와 마지막 체크포인트 위치

함께 보면 좋은 원인

같은 층: L12 데이터베이스

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기