Estou um pouco confuso com a definição de checkpoint_segments na documentação do PostgreSQL. O que acontece quando o checkpoint_segments é alcançado?
- As páginas sujas em shared_buffers gravadas no WAL. Então, qual é o uso do gravador de fundo?
- WAL é mesclado com arquivos de dados reais.
Vasculhando os documentos, vejo o seguinte (detalhes incorretos acidentais serão (ou certamente) apontados por outros):
BW faz seu trabalho de acordo com seus parâmetros de configuração. Ele grava no máximo em
bgwriter_lru_maxpages
buffers compartilhados sujos e, em seguida, tem um intervalo debgwriter_delay
milissegundos. Agora, quando se trata de segmentos decheckpoint_segments
logcheckpoint_timeout
(ou segundos, se vier primeiro), ele libera todos os segmentos sujos (restantes) para arquivos de dados. Agora os dados do banco de dados têm um estado consistente no disco, com uma entrada correspondente no log também. É um bom ponto de partida para um REDO subseqüente, se necessário.E quem faz os checkpoints?
Quanto ao seu segundo ponto, WAL é WAL (armazenado em arquivos de segmento de log) e arquivos de dados são arquivos de dados. Os dois serão consistentes entre si, mas não mesclados.