AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 61822
Accepted
Konrad Garus
Konrad Garus
Asked: 2014-03-27 09:17:19 +0800 CST2014-03-27 09:17:19 +0800 CST 2014-03-27 09:17:19 +0800 CST

O que acontece no ponto de verificação do PostgreSQL?

  • 772

Aqui está parte do meu registro de 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 - você pode ver um número muito grande de consultas normalmente curtas travadas por muito mais tempo do que agora. 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?

postgresql
  • 2 2 respostas
  • 20141 Views

2 respostas

  • Voted
  1. Best Answer
    Craig Ringer
    2014-03-27T17:18:03+08:002014-03-27T17:18:03+08:00

    Durante sua operação, o PostgreSQL registra as alterações nos arquivos de log de transações, mas não as transfere imediatamente para as tabelas reais do banco de dados. Normalmente, ele apenas mantém as alterações na memória e as retorna da memória quando são solicitadas, a menos que a RAM comece a ficar cheia e precise escrevê-las.

    Isso significa que, se ele travar, as tabelas no disco não estarão atualizadas. Ele precisa reproduzir os logs de transação, aplicando as alterações nas tabelas em disco, antes de iniciar o backup. Isso pode demorar um pouco para um banco de dados grande e ocupado.

    Por isso, e para que os logs de transações não continuem crescendo para sempre, o PostgreSQL faz periodicamente um checkpoint onde garante que o BD está limpo. Ele libera todas as alterações pendentes no disco e recicla os logs de transação que estavam sendo usados ​​para manter um registro de recuperação de falhas das alterações.

    Essa descarga acontece em duas fases:

    • Buffered write()s de sujeira shared_bufferspara as tabelas; e
    • fsync()dos arquivos afetados para garantir que as alterações realmente atinjam o disco

    Ambos podem aumentar a carga de E/S do disco. A contenção causada por essas gravações pode desacelerar as leituras e também pode desacelerar a liberação de segmentos WAL necessários para confirmar as transações.

    Tem sido um desafio de longa data, mas está piorando à medida que vemos sistemas com mais e mais RAM para que possam armazenar mais dados em buffer e levar mais tempo para escrevê-los. Há uma discussão entre as comunidades Linux e PostgreSQL sobre como lidar com isso no momento, conforme discutido neste artigo do LWN.net . (LWN.net não será capaz de continuar escrevendo este tipo de grande trabalho se as pessoas não se inscreverem. Sou um assinante e compartilho este link porque é útil e informativo. Por favor, considere se inscrever se quiser ver mais deste tipo de coisa.)

    A principal coisa que você pode fazer para reduzir o impacto dos pontos de verificação no momento é espalhar a atividade do ponto de verificação aumentando checkpoint_completion_targetpara que mais dados tenham sido gravados quando o ponto de verificação final chegar. No entanto, isso tem um custo - se você atualizar uma página (digamos) dez vezes, ela pode ser gravada no disco várias vezes antes do ponto de verificação com uma meta de conclusão alta, mesmo que tenha estritamente que ser gravada uma vez para segurança contra falhas. Um objetivo de conclusão mais alto cria padrões de I/O mais suaves, mas mais sobrecarga geral de I/O.

    A outra coisa que você pode fazer para ajudar é dizer ao seu sistema operacional para começar imediatamente a gravar dados quando receber gravações em buffer. Isso é como o lado do kernel da configuração checkpoint_completion_targete tem uma compensação semelhante. Consulte a documentação do linux vm , em particular dirty_background_bytes, dirty_background_ratio, dirty_expire_centisecs.

    • 37
  2. bobl
    2015-10-14T02:57:00+08:002015-10-14T02:57:00+08:00

    A descarga dos buffers sujos do sistema de arquivos do sistema operacional causada por excesso dirty_bytesou dirty_ratio é uma operação de bloqueio de primeiro plano!

    Os ajustes do kernel dirty_bytes, dirty_background_bytes, dirty_ratioe controlam dirty_background_ratioa dirty_centisecsliberação de buffers sujos do sistema de arquivos do sistema operacional para o disco. dirty_bytesé o limite em bytes, dirty_ratioé o limite como uma proporção da memória total. dirty_background_bytese dirty_background_ratiosã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 centissegundos podem passar antes que uma descarga seja iniciada.

    Recentemente, os padrões para esses ajustáveis ​​foram reduzidos no Linux, pois o tamanho da memória para máquinas modernas aumentou drasticamente. Mesmo proporções de 5 e 10% para dirty_background_ratioe dirty_ratioem uma máquina de 256 GB podem inundar um sistema de E/S.

    Ajustar dirty_background_bytesou dirty_background_ratiocomeçar a liberar buffers sujos em segundo plano é complicado. Felizmente, você pode ajustar essas configurações sem precisar parar o PostgreSQL ou o host, repetindo novos valores para os arquivos apropriados:

    $ sudo echo [int value of bytes] > /proc/sys/vm/dirty_background_bytes
    

    por exemplo, para definir o número de bytes sujos para acionar uma descarga de fundo. Se você estiver usando uma placa RAID com bateria, capacitor ou memória flash (você quer manter seus dados em caso de falha, não é?) comece ajustando dirty_background_bytespara 1/2 do tamanho do buffer do cache de gravação e dirty_bytespara 3/4 desse tamanho. Monitore seu perfil de E/S com iostats e, se ainda estiver vendo 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. Reduza 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!

    • 1

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve