Timeout:VacuumDelay - Amazon Relational Database Service

Timeout:VacuumDelay

O evento Timeout:VacuumDelay indica que o limite de custo para E/S de vácuo foi excedido e que o processo de vácuo foi suspenso. As operações de vácuo são interrompidas pelo período especificado no respectivo parâmetro de atraso de custo e, depois, ele retoma seu trabalho. Para o comando de vácuo manual, o atraso é especificado no parâmetro vacuum_cost_delay. Para o daemon de vácuo automático, o atraso é especificado no autovacuum_vacuum_cost_delay parameter.

Versões compatíveis do mecanismo

Essas informações de eventos de espera são compatíveis com todas as versões do RDS para PostgreSQL.

Contexto

O PostgreSQL tem um daemon de vácuo automático e um comando de vácuo manual. O processo de vácuo automático está “ativado” por padrão para instâncias de banco de dados do RDS para PostgreSQL. O comando de vácuo manual é utilizado conforme a necessidade, por exemplo, para limpar tabelas de tuplas inoperantes ou gerar novas estatísticas.

Quando a aspiração está em andamento, o PostgreSQL usa um contador interno para acompanhar os custos estimados à medida que o sistema executa várias operações de E/S. Quando o contador atinge o valor especificado pelo parâmetro de limite de custo, o processo que executa a operação permanece inativo pelo breve período especificado no parâmetro de atraso de custo. Depois, ele redefine o contador e continua as operações.

O processo de vácuo tem parâmetros que podem ser usados para regular o consumo de recursos. O vácuo automático e o comando de vácuo manual têm seus próprios parâmetros para definir o valor limite de custo. Eles também têm seus próprios parâmetros para especificar um atraso de custo, uma quantidade de tempo para colocar o vácuo em repouso quando o limite é atingido. Dessa forma, o parâmetro de atraso de custo funciona como um controle de utilização do consumo de recursos. Nas listas a seguir, você pode encontrar a descrição desses parâmetros.

Parâmetros que afetam o controle de utilização do daemon de vácuo automático
  • autovacuum_vacuum_cost_limit: especifica o valor limite de custo a ser utilizado em operações automáticas de vácuo. Aumentar a configuração desse parâmetro permite que o processo de vácuo use mais recursos e diminua o evento de espera Timeout:VacuumDelay.

  • autovacuum_vacuum_cost_delay: especifica o valor de atraso de custo a ser utilizado em operações automáticas de vácuo. O valor padrão é 2 milissegundos. Definir o parâmetro de atraso como 0 desativa o controle de utilização e, portanto, o evento de espera Timeout:VacuumDelay não será exibido.

Para ter mais informações, consulte Automatic Vacuuming (Aplicação automática do vacuum) na documentação do PostgreSQL.

Parâmetros que afetam o controle de utilização do processo de vácuo manual
  • vacuum_cost_limit: o limite no qual o processo de vácuo é suspenso. Por padrão, o limite é 200. Esse número representa as estimativas de custo acumuladas para E/S extras necessárias para vários recursos. Aumentar esse valor reduz o número do evento de espera Timeout:VacuumDelay.

  • vacuum_cost_delay: a quantidade de tempo que o processo de vácuo permanece inativo quando o limite de custo do vácuo é atingido. A configuração padrão é 0, o que significa que esse recurso está desativado. Você pode definir isso como um valor inteiro para especificar o número de milissegundos para ativar esse recurso, mas recomendamos que você o deixe na configuração padrão.

Para obter mais informações sobre o parâmetro vacuum_cost_delay, consulte Resource Consumption (Consumo de recursos) na documentação do PostgreSQL.

Para saber mais sobre como configurar e usar o vácuo automático com o RDS for PostgreSQL, consulte Trabalhar com o autovacuum do PostgreSQL no Amazon RDS for PostgreSQL.

Possíveis causas do maior número de esperas

O Timeout:VacuumDelay é afetado pelo equilíbrio entre as configurações dos parâmetros de limite de custo (vacuum_cost_limit, autovacuum_vacuum_cost_limit) e os parâmetros de atraso de custo (vacuum_cost_delay, autovacuum_vacuum_cost_delay) que controlam a duração da suspensão do vácuo. Aumentar o valor de um parâmetro de limite de custo permite que mais recursos sejam utilizados pelo vácuo antes de serem colocados em repouso. Isso ocasiona menos eventos de espera Timeout:VacuumDelay. O aumento de qual quer um dos parâmetros de atraso faz com que o evento de espera Timeout:VacuumDelay ocorra com maior frequência e por longos períodos.

A configuração do parâmetro autovacuum_max_workers também pode aumentar o número de Timeout:VacuumDelay. Cada processo adicional de processamento do vácuo automático contribui para o mecanismo interno do contador e, portanto, o limite pode ser atingido mais rapidamente do que com um único processo de vácuo automático. À medida que o limite de custo é atingido mais rapidamente, o atraso de custo é aplicado com maior frequência, ocasionando mais eventos de espera Timeout:VacuumDelay. Para obter mais informações, consulte autovacuum_max_workers na documentação do PostgreSQL.

Objetos grandes, como 500 GB ou maiores, também aumentam esse evento de espera porque pode levar algum tempo para que o vácuo conclua o processamento de objetos grandes.

Ações

Se as operações de vácuo forem concluídas conforme o esperado, nenhuma correção será necessária. Em outras palavras, esse evento de espera não indica necessariamente um problema. Isso indica que o vácuo está sendo colocado em repouso pelo período especificado no parâmetro de atraso para que os recursos possam ser aplicados a outros processos que precisam ser concluídos.

Se quiser que as operações de vácuo sejam concluídas mais rapidamente, você poderá reduzir os parâmetros de atraso. Isso reduz o tempo em que o vácuo permanece suspenso.