Configurar parâmetros de servidor de aspiração automática
O processo de vácuo é configurado usando os parâmetros do servidor de vácuo automático, o que permite otimizar o processo de vácuo para sua carga de trabalho. No portal do Azure, selecione seu servidor Banco de Dados do Azure para PostgreSQL e selecione Parâmetros do Servidor no menu à esquerda. Na barra de pesquisa, insira aspiração automática. Como alternativa, podemos usar o SQL para consultar as exibições do catálogo do sistema para localizar a configuração atual do vácuo automático usando a consulta a seguir.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
Nome do Parâmetro | Padrão | Descrição |
---|---|---|
aspiração automática | ATIVADO | Habilita ou desabilita o processo de servidor de aspiração automática. A aspiração automática deve estar sempre habilitada. |
autovacuum_analyze_scale_factor | 0,1 | Especifica uma fração da tabela a ser adicionada a autovacuum_vacuum_threshold ao decidir se uma operação de aspiração deve ser disparada. 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 disparar o processo de análise para qualquer tabela. |
autovacuum_freeze_max_age | 200000000 | Idade máxima (em transações) antes de disparar a aspiração automática em uma tabela para evitar o encapsulamento da ID da transação. |
autovacuum_max_workers | 3 | O número máximo de processos de aspiração automática em execução de uma só vez, além do inicializador de aspiração automática. |
autovacuum_multixact_freeze_max_age | 400000000 | Idade máxima (em multixact) antes de disparar a aspiração automática em uma tabela para evitar o encapsulamento de multixact. |
autovacuum_naptime | 60 segundos | O atraso entre processos de aspiração automática em um banco de dados. Em cada turno, o daemon examina o banco de dados e emite comandos VACUUM e ANALYZE conforme necessário para as tabelas nesse banco de dados. |
autovacuum_vacuum_cost_limit | -1 | O custo máximo para operações de aspiração automática. Se -1, que é o padrão, for especificado, o valor normal de vacuum_cost_limit será usado. Com mais de um trabalho, o valor é distribuído proporcionalmente entre os trabalhadores de vácuo automático em execução. A soma para cada trabalho não excederá o valor dessa variável. |
autovacuum_vacuum_insert_threshold | 1000 | O número de linhas inseridas que dispararão 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 uma aspiração deve ser disparada. |
autovacuum_vacuum_threshold | 50 | O número mínimo de linhas atualizadas, inseridas ou excluídas para disparar uma aspiração para uma tabela. |
autovacuum_vacuum_insert_scale_factor | 0,2 | Especifica uma fração do tamanho da tabela a ser adicionada a autovacuum_vacuum_insert_threshold para disparar o processo de aspiração. |
autovacuum_work_mem | -1 KB | A memória máxima que cada processo de vácuo automático pode usar. |
log_autovacuum_min_duration | -1 | O tempo em milissegundos, registrado pelas ações de vácuo automático. |
A frequência de execução do processo de aspiração não deve ser demasiadamente grande nem pequena. A frequência ideal dependerá da carga de trabalho. Teste cada um dos parâmetros de salvamento 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 a aspiração é executada.
- O processo de aspiração consome tempo de computação e memória.
Otimizar a aspiração no nível da tabela
No Banco de Dados do Azure para PostgreSQL, os parâmetros de aspiração automática podem ser definidos no nível de tabela. Quando algumas tabelas são atualizadas mais do que outras, isso pode melhorar o desempenho. Um exemplo de configuração de aspiração automática no nível de tabela:
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);
No nível de tabela, a aspiração automática é um processo síncrono. Quanto maior for a porcentagem de tuplas mortas em uma tabela, maior será o “custo” incorrido pelo processo de vácuo automático.
Se tiver tabelas com uma alta taxa de atualizações, considere dividi-las em várias tabelas. Essa divisão ajuda a paralelizar o vácuo automático e reduzir o "custo" para qualquer tabela. Você também pode aumentar o número de funções de trabalho de aspiração automática.