Impacto no desempenho da configuração do PostgreSQL para registrar todas as instruções

8

PostgreSQL 9.2.2 no Windows 7 de 64 bits.

A configuração log_statementno postgresql.confarquivo especifica quais instruções registrar (nenhuma, DDL, modificação de dados ou todas). Até que ponto a configuração log_statement = 'all'prejudica o desempenho? Eu li que isso reduz significativamente o desempenho, mas essas reivindicações vêm de artigos mais antigos; portanto, quanto de perda de desempenho devo esperar em relação a log_statement = 'none'?

bwDraco
fonte

Respostas:

12

Como quase tudo, depende do seu hardware, configuração e carga de trabalho.

Se você estiver executando algumas declarações caras, fará pouca diferença; se você estiver executando muitas instruções simples e minúsculas, fará mais diferença.

Se os seus logs estiverem no mesmo sistema de arquivos ou mesmo no mesmo disco do banco de dados, o registro fará mais diferença do que se os logs estiverem armazenados em um disco separado. Embora os logs não sejam explicitamente fsync()definidos e gravados sequencialmente, eles ainda estão competindo com o DB principal para E / S.

Mais importante, alguns sistemas de arquivos (ext3 em particular) liberarão todos os dados quando qualquer arquivo for encontrado fsync(); portanto, as gravações de log ficam mais próximas da E / S aleatória do que na E / S sequencial e diminuem a velocidade de cada confirmação. IIRC, este não é um problema no ext4 ou xfs.

Também dependerá se você tem o tempo da instrução ativado, o método de registro que você está usando e muito mais.

A melhor opção é compará-lo com uma simulação de sua carga de trabalho real e ver.

Craig Ringer
fonte
Registrando no stderr como arquivo de texto sem formatação no mesmo disco. O tempo da instrução está desativado. O coletor de log está ativado. Ocasionalmente, o servidor está sujeito a consultas frequentes e moderadamente complexas.
bwDraco
@DragonLord: o tempo da declaração faz uma grande diferença. para carga da CPU.
Erwin Brandstetter