Prezada comunidade PostgreSQL, Estou tentando entender melhor os pontos de verificação do PostgreSQL internamente, então estava pensando neste cenário.
Digamos que temos checkpoint_timeout 15 minutos e checkpoint_completion_target 0,85. Agora, se enfrentarmos um caso em que um posto de controle, por algum motivo, leva, digamos, 20 minutos, por exemplo
13h00 - ponto de verificação 1 iniciado
13h15 O tempo limite do checkpoint foi acionado, mas o checkpoint1 ainda está em execução (o checkpoint2 aqui foi agendado)
13h20 - ponto de verificação 1 concluído
Minha pergunta é: o próximo ponto de verificação será acionado imediatamente às 13h20 ou será suspenso e iniciado às 13h30, conforme programado inicialmente? Presumo que dois pontos de verificação não podem se sobrepor. (Por enquanto não vamos discutir outros parâmetros que afetam como max_wal_size, que também podem ser acionados)
O ponto de verificação 1 grava TODOS os buffers sujos no disco, de modo que temos um estado muito limpo às 1:20, portanto não há necessidade de iniciar o segundo ponto de verificação? Pelo que entendi, o ponto de verificação antigo não tocará nas páginas que foram sujas após o seu início; portanto, neste caso, é necessário que o novo ponto de verificação seja acionado apenas após o término do antigo.
Além disso, o agendamento de checkpoint_timeout será alterado de alguma forma? Tipo programado para atrasar tanto quanto o anterior atrasou, ou não é alterável?
Ficarei mais do que feliz se você puder compartilhar mais detalhes sobre insights internos.