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

Guia do Lag em Jogos › L12 Banco de dados

Checkpoint e flush de log Checkpoint / log flush stalls

ID da causa db-checkpoint · Responsável principal Infraestrutura de banco de dados (Equipe de infraestrutura)

Abrir o card interativo, com figuras e simulações →

O BD grava periodicamente no disco, de uma vez, as alterações acumuladas na memória, e nesse momento as queries ficam lentas.

Por quê As alterações se acumulam e são gravadas no disco periodicamente → Efeito Nesse momento o disco fica ocupado e as queries atrasam → Na tela Salvamentos e carregamentos ficam lentos em intervalos regulares

Sintomas
Input lag, Engasgos
Fatores
Latência
Quem é afetado
Servidor inteiro, Só um recurso específico
Quando
Em intervalos regulares
Responsável
Responsável principal Infraestrutura de banco de dados (Equipe de infraestrutura)
O que fazer (Equipe de infraestrutura)
Dividir os checkpoints em partes menores e espalhá-los, dar folga ao log de transações (redo log, WAL), usar disco rápido.
No gráfico
Picos em intervalos regulares · Latência das queries do BD, volume de escrita no disco
Onde olhar
No PostgreSQL, ver no log do log_checkpoints (ativo por padrão nas versões recentes) o horário de cada checkpoint e o número de buffers gravados, o número de checkpoints (num_timed e num_requested do pg_stat_checkpointer a partir da 17; checkpoints_timed e checkpoints_req do pg_stat_bgwriter na 16 e anteriores) e os avisos de checkpoint_warning. No MySQL, ver na seção LOG do SHOW ENGINE INNODB STATUS a diferença entre Log sequence number e Last checkpoint at. Sobrepor o volume e a latência de escrita no disco do servidor
Confirma se
Os picos de latência das queries coincidem com os checkpoints, e nesse momento o volume e a latência de escrita no disco disparam. No PostgreSQL, se os checkpoints por requisição (num_requested) forem muito mais numerosos que os por tempo (num_timed), o WAL está batendo com frequência no max_wal_size e antecipando os checkpoints
Descarta se
Picos em intervalos sem relação com os checkpoints: backup ou jobs em lote (dk-backup, db-batch)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
Se o log de transações que guarda o registro das alterações (redo log no MySQL, WAL no PostgreSQL) for pequeno demais, o BD faz checkpoints às pressas toda vez que o log enche, e a vazão de escrita cai muito por alguns instantes.

Fontes

  1. WAL Configuration (PostgreSQL Documentation) PostgreSQL
    Checkpoint a cada 5 minutos ou 1 GB de WAL (max_wal_size) por padrão; é caro porque grava todas as páginas sujas. checkpoint_completion_target distribui as escritas e evita picos de I/O. Se o intervalo entre checkpoints for menor que checkpoint_warning, um aviso no log recomenda aumentar o max_wal_size
  2. Configuring Buffer Pool Flushing MySQL
    Quando o redo log enche, um checkpoint às pressas (sharp checkpoint) derruba a vazão por um momento; o flush adaptativo distribui as escritas de forma uniforme
  3. Error Reporting and Logging (PostgreSQL Documentation) PostgreSQL
    log_checkpoints: registra no log, a cada checkpoint, o número de buffers gravados e o tempo gasto; ativo por padrão
  4. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    num_timed (checkpoints feitos por tempo) e num_requested (checkpoints solicitados) do pg_stat_checkpointer
  5. PostgreSQL 17 Release Notes PostgreSQL
    Criação do pg_stat_checkpointer, com as colunas de checkpoint movidas do pg_stat_bgwriter
  6. The Cumulative Statistics System (PostgreSQL 16 Documentation) PostgreSQL
    Até a 16, checkpoints_timed e checkpoints_req do pg_stat_bgwriter
  7. InnoDB Standard Monitor and Lock Monitor Output MySQL
    Seção LOG: número de sequência do log atual e posição do último checkpoint

Veja também

Mesma camada: L12 Banco de dados

Mesmo sintoma (Input lag) em outras camadas

Ver o card interativo, com figuras e simulações