Configurar parâmetros do servidor de vácuo automático

Concluído

O processo de vácuo é configurado usando os parâmetros do servidor de vácuo automático que permite otimizar o processo de vácuo para sua carga de trabalho. No portal do Azure, selecione seu Banco de Dados do Azure para servidor PostgreSQL e selecione Parâmetros do Servidor no menu à esquerda. Na barra de pesquisa, digite autovacuum. Como alternativa, podemos usar SQL para consultar as exibições do catálogo do sistema para encontrar a configuração atual do autovacuum usando a consulta a seguir.

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
Nome do parâmetro Predefinido Description
autovácuo ON Habilita ou desabilita o processo do servidor de vácuo automático. O vácuo automático deve estar sempre ativado.
autovacuum_analyze_scale_factor 0.1 Especifica uma fração da tabela a ser adicionada à autovacuum_vacuum_threshold ao decidir se deseja acionar uma operação de vácuo. Por exemplo, 0,2 é 20% do tamanho da tabela.
autovacuum_analyze_threshold 50 O número de linhas inseridas, atualizadas ou excluídas necessárias para acionar o processo de análise para qualquer tabela.
autovacuum_freeze_max_age 200000000 Idade máxima (em transações) antes de acionar o autovacuum em uma tabela para evitar o wraparound do ID da transação.
autovacuum_max_workers 3 O número máximo de processos de autovácuo em execução em qualquer momento, exceto o lançador de autovácuo.
autovacuum_multixact_freeze_max_age 400000000 Idade máxima (em multixact) antes de acionar o autovácuo em uma mesa para evitar o envolvimento do multixact.
autovacuum_naptime 60 segundos O atraso entre processos de vácuo automático em um banco de dados. Em cada rodada, o daemon examina o banco de dados e emite os comandos VACUUM e ANALYZE conforme necessário para tabelas nesse banco de dados.
autovacuum_vacuum_cost_limit -1 O custo máximo para operações automáticas de vácuo. Se -1 for especificado, que é o padrão, o valor vacuum_cost_limit regular será usado. Com mais de um trabalhador, o valor é distribuído proporcionalmente entre os trabalhadores de autovácuo em execução. A soma de cada trabalhador não pode exceder o valor desta variável.
autovacuum_vacuum_insert_threshold 1000 O número de linhas inseridas que aciona o vácuo para qualquer tabela.
autovacuum_vacuum_scale_factor 0.2 Usado com autovacuum_vacuum_threshold. A fração de uma tabela usada para decidir se deve acionar um vácuo.
autovacuum_vacuum_threshold 50 O número mínimo de linhas atualizadas, inseridas ou excluídas para acionar um vácuo para uma tabela.
autovacuum_vacuum_insert_scale_factor 0.2 Especifica uma fração do tamanho da tabela a ser adicionada à autovacuum_vacuum_insert_threshold para acionar o processo de vácuo.
autovacuum_work_mem -1 KB A memória máxima que cada processo de autovácuo pode usar.
log_autovacuum_min_duration -1 O tempo em milissegundos, registrado pelas ações de autovácuo.

O processo de vácuo não deve ser executado com muita frequência, ou com pouca frequência. A frequência ideal depende da carga de trabalho. Teste cada um dos parâmetros de vácuo automático para encontrar o que funciona melhor para sua carga de trabalho. O custo do processo de aspiração inclui:

  • As páginas de dados são bloqueadas quando o vácuo é executado.
  • O processo de vácuo consome tempo de computação e memória.

Otimize o vácuo ao nível da mesa

No Banco de Dados do Azure para PostgreSQL, os parâmetros de autovacuum podem ser definidos no nível da tabela. Quando algumas tabelas são atualizadas mais do que outras, isso pode melhorar o desempenho. Um exemplo de configuração do autovacuum ao nível da mesa:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

Ao nível da tabela, o autovácuo é um processo síncrono. Quanto maior a percentagem de tuplas mortas que uma tabela tem, maior é o "custo" incorrido pelo processo de autovácuo.

Para tabelas com uma alta taxa de atualizações, considere dividir a tabela em várias tabelas. Esta divisão ajuda a paralelizar o autovácuo e a reduzir o "custo" de qualquer mesa. Você também pode aumentar o número de trabalhadores de autovácuo paralelos.