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.
Apenas um ponto de verificação pode ser executado por vez, portanto, se o ponto de verificação anterior ainda estiver em andamento, o próximo ponto de verificação terá que esperar até que o primeiro seja concluído. O segundo ponto de verificação deve começar logo após a conclusão do anterior.
O segundo ponto de verificação pode ter menos trabalho a fazer, mas os buffers podem ficar sujos novamente enquanto o primeiro ponto de verificação estiver em andamento, portanto o segundo ponto de verificação não terá nada para fazer.
O PostgreSQL não ajustará
checkpoint_timeout
, mas se mais do quemax_wal_size
WAL tiver sido gravado desde o último ponto de verificação, outro ponto de verificação será iniciado. A ideia é manter o tempo de recuperação de falhas limitado.