Configurar parâmetros do servidor de vácuo automático
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.