Estou lendo o livro de receitas do postgresql admin. Alguns dos parâmetros do servidor de banco de dados exigem uma reinicialização e, com um banco de dados ocupado, pode ser necessário reiniciar rapidamente. Há várias coisas a fazer para acelerar a reinicialização: 1) emitir um ponto de verificação normal antes do ponto de verificação de desligamento, 2) liberar todos os shared_buffers sujos no disco, 3) registrar o conteúdo do cache do banco de dados antes do desligamento e, em seguida, aquecer o cache novamente imediatamente após reiniciar. Portanto, o livro parece recomendar:
psql -c "CHECKPOINT"
psql -c "select pg_cache_save('mycache')"
pg_ctl -D datadir -m immediate restart
psql -c "select pg_cache_warm('mycache')"
Ele também mostrou esse método para:
pg_ctl -D datadir restart -m fast
Qual devo usar ao reiniciar um banco de dados ocupado que recebe inserções com muita frequência? Uma das opções acima ou existe um método melhor?
Se seus clientes lidam bem com a desconexão e não perdem dados, você provavelmente deve usar o primeiro processo: forçar um ponto de verificação e executar uma reinicialização imediata. Isso fará com que o servidor volte a funcionar mais rápido do que uma
fast
reinicialização, ao custo de maior interrupção para os clientes ativos no momento.Os aplicativos cliente obterão erros na próxima execução de uma instrução SQL. Aplicativos bem escritos descartarão a conexão com o banco de dados e tentarão novamente, para que o usuário não perceba/veja nada.
Aplicativos menos bem escritos relatarão um erro ao usuário.
Aplicativos realmente mal escritos perderão dados silenciosamente (se engolirem exceções) ou executarão apenas parte de uma operação (se não estiverem usando transações corretamente). Esses clientes também terão problemas em outras circunstâncias e devem ser corrigidos.