Aqui está parte do meu log do ponto de verificação:
2014-03-26 11:51:29.341 CDT,,,18682,,532854fc.48fa,4985,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 15047 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 30 recycled; write=68.980 s, sync=1.542 s, total=70.548 s; sync files=925, longest=0.216 s, average=0.001 s",,,,,,,,,""
2014-03-26 11:56:05.430 CDT,,,18682,,532854fc.48fa,4987,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 16774 buffers (1.6%); 0 transaction log file(s) added, 0 removed, 31 recycled; write=72.542 s, sync=17.164 s, total=89.733 s; sync files=885, longest=3.812 s, average=0.019 s",,,,,,,,,""
2014-03-26 12:01:21.650 CDT,,,18682,,532854fc.48fa,4989,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 14436 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 33 recycled; write=122.350 s, sync=5.212 s, total=127.676 s; sync files=924, longest=3.740 s, average=0.005 s",,,,,,,,,""
2014-03-26 12:06:25.028 CDT,,,18682,,532854fc.48fa,4991,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 13277 buffers (1.3%); 0 transaction log file(s) added, 0 removed, 29 recycled; write=126.217 s, sync=5.733 s, total=131.991 s; sync files=894, longest=1.859 s, average=0.006 s",,,,,,,,,""
2014-03-26 12:10:41.958 CDT,,,18682,,532854fc.48fa,4993,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 20765 buffers (2.0%); 0 transaction log file(s) added, 0 removed, 28 recycled; write=88.015 s, sync=10.818 s, total=98.872 s; sync files=881, longest=2.690 s, average=0.012 s",,,,,,,,,""
Percebi que, às vezes, nosso banco de dados é muito lento - é possível ver um número muito grande de consultas normalmente curtas travadas por muito mais tempo do que agora. Isso acontece regularmente sem um culpado claro.
Pergunta: O ponto de verificação pode causar isso? O que acontece na fase de "sincronização" do ponto de verificação?
fonte
Limpar os buffers sujos do sistema de arquivos do sistema operacional causados por exceder
dirty_bytes
oudirty_ratio
é uma operação de bloqueio em primeiro plano!Os ajustáveis do kernel
dirty_bytes
,dirty_background_bytes
,dirty_ratio
,dirty_background_ratio
edirty_centisecs
controle de descarga de buffers do sistema de arquivos OS sujas no disco.dirty_bytes
é o limite em bytes,dirty_ratio
é o limite como uma proporção da memória total.dirty_background_bytes
edirty_background_ratio
são limites semelhantes, mas a liberação ocorre em segundo plano e não bloqueia outras operações de leitura / gravação até que seja concluída.dirty_centisecs
é quantos centisegundos podem passar antes que um flush seja iniciado.Recentemente, os padrões desses ajustáveis foram reduzidos no Linux, pois o tamanho da memória das máquinas modernas aumentou dramaticamente. Mesmo taxas de 5 e 10% para
dirty_background_ratio
edirty_ratio
em uma máquina de 256 GB podem inundar um sistema de E / S.Ajustar
dirty_background_bytes
oudirty_background_ratio
iniciar a limpeza de buffers sujos em segundo plano é complicado. Felizmente, você pode ajustar essas configurações sem precisar parar o PostgreSQL ou o host, repetindo novos valores nos arquivos apropriados:por exemplo, para definir o número de bytes sujos para acionar uma descarga de fundo. Se você estiver usando uma, apoiada pelo capacitor, ou memória flash cartão de RAID com suporte de bateria (você não quer manter seus dados em caso de um acidente, não é?) Começar por ajuste
dirty_background_bytes
a 1/2 da gravação de cache tamanho do buffer edirty_bytes
para 3/4 desse tamanho. Monitore seu perfil de E / S com iostats e se você ainda estiver com problemas de latência, isso significa que a carga de gravação do banco de dados ainda está sobrecarregando as liberações do cache do buffer de arquivo. Abaixe os valores até que a latência melhore ou considere atualizar seu subsistema de E / S. Placas FusionIO e SSDs são duas possibilidades para taxa de transferência de E / S extrema.Boa sorte!
fonte