Timeout:VacuumDelay - Amazon Relational Database Service

Timeout:VacuumDelay

El evento Timeout:VacuumDelay indica que se ha superado el límite de costo de las E/S de vacío y que el proceso de vacío está en reposo. Las operaciones de aspiración se detienen durante el tiempo especificado en el parámetro de retraso de coste correspondiente y, a continuación, reanudan su trabajo. Para el comando de limpieza manual, el retraso se especifica en el parámetro vacuum_cost_delay. Para el deamon autovacuum, el retraso se especifica en autovacuum_vacuum_cost_delay parameter..

Versiones del motor admitidas

Esta información de eventos de espera es compatible con todas las versiones de RDS para PostgreSQL.

Contexto

PostgreSQL tiene un daemon autovaccum y un comando de limpieza manual. El proceso de autovacuum está “activado” de forma predeterminada para las instancias de base de datos de RDS para PostgreSQL. El comando de limpieza manual se usa según sea necesario, por ejemplo, para purgar tablas de tuplas muertas o para generar nuevas estadísticas.

Cuando se realiza la limpieza, PostgreSQL utiliza un contador interno para realizar un seguimiento de los costos estimados a medida que el sistema realiza diversas operaciones de E/S. Cuando el contador alcanza el valor especificado en el parámetro de límite de costo, el proceso que realiza la operación permanece en reposo durante el breve período especificado en el parámetro de retraso de costo. A continuación, reinicia el contador y continúa con las operaciones.

El proceso de vacío tiene parámetros que se pueden utilizar para regular el consumo de recursos. El vacío automático y el comando de vacío manual tienen sus propios parámetros para establecer el valor de límite de costo. También tienen sus propios parámetros para especificar un retraso en el costo, una cantidad de tiempo para poner la limpieza en reposo cuando se alcanza el límite. De esta manera, el parámetro de retraso de costos funciona como un mecanismo de limitación del consumo de recursos. En las siguientes listas encontrará las descripciones de estos parámetros.

Parámetros que afectan a la limitación del daemon autovacuum
  • autovacuum_vacuum_cost_limit: especifica el valor límite de costo que se utilizará en las operaciones de vacío automático. El aumento de la configuración de este parámetro permite que el proceso de vacío utilice más recursos y reduce el evento de espera Timeout:VacuumDelay.

  • autovacuum_vacuum_cost_delay: especifica el valor retardo de costo que se utilizará en las operaciones de vacío automático. El valor predeterminado es de 2 milisegundos. Al establecer el parámetro de retardo en 0, se desactiva el mecanismo de limitación y, por lo tanto, el evento de espera Timeout:VacuumDelay no aparecerá.

Para más información, visite Automatic Vacuuming (Vacío automático) en la documentación de PostgreSQL.

Parámetros que afectan a la limitación del proceso de vacío manual
  • vacuum_cost_limit: umbral en el que el proceso de limitación está en reposo. El límite predeterminado de es de 200. Este número representa las estimaciones de costos acumulados para las E/S adicionales que necesitan varios recursos. Al aumentar este valor, se reduce el número del evento de espera Timeout:VacuumDelay.

  • vacuum_cost_delay: cantidad de tiempo que el proceso de vacío está en reposo cuando se ha alcanzado el límite de costo de vacío. La configuración predeterminada es 0, lo que significa que esta función está desactivada. Puede configurarla con un valor entero para especificar el número de milisegundos necesarios para activar esta función, pero le recomendamos que la deje como configuración predeterminada.

Para obtener más información acerca del parámetro vacuum_cost_delay, consulte el punto Resource Consumption (Consumo de recursos) en la documentación de PostgreSQL.

Para obtener más información acerca del uso del vacío automático con RDS para PostgreSQL, consulte Uso de autovacuum de PostgreSQL en Amazon RDS for PostgreSQL.

Causas probables del aumento de las esperas

Timeout:VacuumDelay se ve afectado por el equilibrio entre la configuración de los parámetros del límite de costo (vacuum_cost_limit, autovacuum_vacuum_cost_limit) y los parámetros de retraso de costo (vacuum_cost_delay, autovacuum_vacuum_cost_delay) que controlan la duración del reposo del vacío. Al aumentar el valor de un parámetro de límite de costo, el vacío puede utilizar más recursos antes de que entre en reposo. Esto se traduce en menos eventos de espera Timeout:VacuumDelay. El aumento de cualquiera de los parámetros de retraso hace que el evento de espera Timeout:VacuumDelay se produzca con más frecuencia y durante períodos de tiempo más prolongados.

La configuración del parámetro autovacuum_max_workers también puede aumentar el número de Timeout:VacuumDelay. Cada proceso adicional de trabajo de autovacuum contribuye al mecanismo de contador interno y, por lo tanto, se puede alcanzar el límite más rápidamente que con un solo proceso de trabajo de autovacuum. A medida que se alcanza el límite de costo más rápidamente, el retraso en el costo se hace efectivo con más frecuencia, lo que resulta en más eventos de espera Timeout:VacuumDelay. Para más información, consulte autovacuum_max_workers en la documentación de PostgreSQL.

Los objetos grandes, como de 500 GB o más, también aumentan este evento de espera, ya que el vacío puede tardar algún tiempo en completar el procesamiento de objetos grandes.

Acciones

Si las operaciones de vacío se completan según lo previsto, no es necesario realizar ninguna corrección. En otras palabras, este evento de espera no significa necesariamente que se trate de un problema. Indica que el vacío está en reposo durante el período de tiempo especificado en el parámetro de retraso, de modo que los recursos se puedan aplicar a otros procesos que deben completarse.

Si desea que las operaciones de vacío se completen más rápido, puede reducir los parámetros de retardo. Esto acorta el tiempo que el vacío permanece inactivo.