Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Aspirar y analizar mesas automáticamente
Autovacuum es un demonio (es decir, se ejecuta en segundo plano) que aspira (limpia) automáticamente las tuplas muertas, recupera el almacenamiento y recopila estadísticas. Comprueba si hay tablas hinchadas en la base de datos y las borra para reutilizar el espacio. Supervisa las tablas y los índices de las bases de datos y los añade a una tarea vacía cuando alcanzan un límite específico de operaciones de actualización o eliminación.
Autovacuum gestiona la aspiración automatizando VACUUM
PostgreSQL y los comandos. ANALYZE
VACUUM
elimina la sobrecarga de las tablas y recupera espacio, a la vez que ANALYZE
actualiza las estadísticas que permiten al optimizador elaborar planes eficientes. VACUUM
también lleva a cabo una importante tarea denominada congelación por vacío para evitar problemas relacionados con los identificadores de las transacciones en la base de datos. Cada fila que se actualiza en la base de datos recibe un ID de transacción del mecanismo de control de transacciones de PostgreSQL. Estos identificadores controlan la visibilidad de la fila frente a otras transacciones simultáneas. El identificador de la transacción es un número de 32 bits. Siempre se guardan dos mil millones de identificaciones en el pasado visible. Los ID restantes (unos 2.200 millones) se conservan para las transacciones que se realizarán en el futuro y se ocultan en la transacción actual. PostgreSQL requiere una limpieza y congelación ocasionales de las filas antiguas para evitar que las transacciones se acumulen y hagan invisibles las filas antiguas existentes cuando se crean nuevas transacciones. Para obtener más información, consulte Preventing Transaction ID Wraparound Failures
Se recomienda utilizar el aspirador automático, que está activado de forma predeterminada. Entre sus parámetros se incluyen los siguientes.
Parámetro |
Descripción |
Predeterminado para Amazon RDS |
Predeterminado para Aurora |
|
El número mínimo de operaciones de actualización o eliminación de tuplas que deben realizarse en una mesa antes de que la aspiradora automática la aspire. |
50 operaciones |
50 operaciones |
|
El número mínimo de inserciones, actualizaciones o eliminaciones de tuplas que deben producirse en una tabla antes de que Autovacuum la analice. |
50 operaciones |
50 operaciones |
|
El porcentaje de tuplas que deben modificarse en una tabla antes de aspirarla con una aspiradora automática. |
0,2% |
0,1% |
|
El porcentaje de tuplas que deben modificarse en una tabla antes de que la aspiradora automática la analice. |
0,05% |
0,05% |
|
La antigüedad máxima de los ID congelados antes de que se vacíe una mesa para evitar problemas relacionados con los identificadores de transacción. |
200 000 000 de transacciones |
200 000 000 de transacciones |
Autovacuum crea una lista de tablas para procesarlas en función de fórmulas de umbral específicas, de la siguiente manera.
-
Umbral para correr
VACUUM
sobre una mesa:vacuum threshold = autovacuum_vacuum_threshold + (autovacuum_vacuum_scale_factor * Total row count of table)
-
Umbral para correr
ANALYZE
sobre una mesa:analyze threshold = autovacuum_analyze_threshold + (autovacuum_analyze_scale_factor * Total row count of table)
Para tablas pequeñas o medianas, los valores predeterminados pueden ser suficientes. Sin embargo, una tabla grande que tenga modificaciones de datos frecuentes tendrá un mayor número de tuplas inactivas. En este caso, es posible que la aspiradora automática procese la tabla con frecuencia para realizar tareas de mantenimiento y que el mantenimiento de otras tablas se retrase o se ignore hasta que se acabe la tabla grande. Para evitarlo, puede ajustar los parámetros de la aspiradora automática que se describen en la siguiente sección.
Parámetros relacionados con la memoria del aspirador automático
autovacuum_max_workers
Especifica el número máximo de procesos de aspiración automática (distintos del lanzador de aspiración automática) que se pueden ejecutar al mismo tiempo. Este parámetro solo se puede configurar al iniciar el servidor. Si el proceso de aspiración automática está ocupado con una tabla grande, este parámetro ayuda a limpiar otras tablas.
maintenance_work_mem
Especifica la cantidad máxima de memoria que deben utilizar las operaciones de mantenimientoVACUUM
, comoCREATE INDEX
, y. ALTER
En Amazon RDS y Aurora, la memoria se asigna en función de la clase de instancia mediante la fórmulaGREATEST({DBInstanceClassMemory/63963136*1024},65536)
. Cuando se ejecuta la aspiradora automática, se puede asignar hasta 3 autovacuum_max_workers
veces el valor calculado, así que procure no establecer el valor demasiado alto. Para controlar esto, puede configurarlo autovacuum_work_mem
por separado.
autovacuum_work_mem
Especifica la cantidad máxima de memoria que utilizará cada proceso de trabajo de autovacuum. El valor predeterminado de este parámetro es -1, lo que indica que debe utilizar el valor de maintenance_work_mem
en su lugar.
Para obtener más información sobre los parámetros de memoria del aspirador automático, consulte Asignación de memoria para el aspirador automático en la documentación de Amazon RDS.
Ajuste de los parámetros del aspirador automático
Es posible que los usuarios necesiten ajustar los parámetros del aspirador automático en función de sus operaciones de actualización y eliminación. La configuración de los siguientes parámetros se puede establecer a nivel de tabla, instancia o clúster.
A nivel de clúster o instancia
Como ejemplo, veamos una base de datos bancaria en la que se esperan operaciones de lenguaje de manipulación continua de datos (DML). Para mantener el estado de la base de datos, debe ajustar los parámetros de autovacuum a nivel de clúster para Aurora y a nivel de instancia para Amazon RDS, y aplicar también el mismo grupo de parámetros al lector. En el caso de una conmutación por error, se deberían aplicar los mismos parámetros al nuevo grabador.
Nivel de tabla
Por ejemplo, en una base de datos para la entrega de alimentos en la que se esperan operaciones de DML continuas en una sola tabla llamadaorders
, debería plantearse ajustar el autovacuum_analyze_threshold
parámetro a nivel de tabla mediante el siguiente comando:
ALTER TABLE <table_name> SET (autovacuum_analyze_threshold = <threshold rows>)
Utilice ajustes de aspiración automática agresivos a nivel de mesa
La orders
tabla de ejemplo que tiene operaciones de actualización y eliminación continuas se convierte en una buena opción para aspirar debido a la configuración de aspiración automática predeterminada. Esto lleva a que se generen planes incorrectos y a que las consultas sean lentas. Eliminar la sobrecarga y actualizar las estadísticas requiere una configuración de autovacío agresiva a nivel de tabla.
Para determinar la configuración, lleve un registro de la duración de las consultas que se ejecutan en esta tabla e identifique el porcentaje de operaciones de DML que dan lugar a cambios en el plan. La pg_stat_all_table
vista le ayuda a realizar un seguimiento de las operaciones de inserción, actualización y eliminación.
Supongamos que el optimizador genera planes incorrectos cada vez que cambia el 5 por ciento de la orders
tabla. En este caso, debe cambiar el umbral al 5 por ciento de la siguiente manera:
ALTER TABLE orders SET (autovacuum_analyze_threshold = 0.05 and autovacuum_vacuum_threshold = 0.05)
sugerencia
Seleccione cuidadosamente los ajustes de aspiración automática agresivos para evitar un alto consumo de recursos.
Para más información, consulte los siguientes temas:
-
Descripción del autovacuum en entornos Amazon RDS para
AWS PostgreSQL (entrada del blog) -
Aspiración automática (documentación de
PostgreSQL) -
Ajuste de los parámetros de PostgreSQL en Amazon RDS y Amazon AWS Aurora (guía prescriptiva)
Para asegurarse de que la aspiradora automática funciona de forma eficaz, supervise las filas muertas, el uso del disco y la última vez que la aspiradora automática o ANALYZE
se ejecutó de forma regular. La pg_stat_all_tables
vista proporciona información sobre cada tabla (relname
) y sobre cuántas tuplas muertas (n_dead_tup
) hay en la tabla.
Supervisar el número de tuplas inactivas en cada tabla, especialmente en las que se actualizan con frecuencia, permite determinar si los procesos de aspiración automática eliminan periódicamente las tuplas inactivas para reutilizar su espacio en disco y mejorar el rendimiento. Puede utilizar la siguiente consulta para comprobar el número de tuplas inactivas y cuándo se utilizó la última aspiradora automática en las tablas:
SELECT relname AS TableName,n_live_tup AS LiveTuples,n_dead_tup AS DeadTuples, last_autovacuum AS Autovacuum,last_autoanalyze AS AutoanalyzeFROM pg_all_user_tables;
Ventajas y limitaciones
La aspiradora automática ofrece las siguientes ventajas:
-
Elimina automáticamente la hinchazón de las mesas.
-
Evita que la ID de la transacción se distorsione.
-
Mantiene actualizadas las estadísticas de la base de datos.
Limitaciones:
-
Si las consultas utilizan el procesamiento paralelo, es posible que la cantidad de procesos de trabajo no sea suficiente para el autovacuum.
-
Si la aspiradora automática se ejecuta durante las horas pico, es posible que aumente la utilización de los recursos. Debe ajustar los parámetros para solucionar este problema.
-
Si las páginas de la tabla están ocupadas en otra sesión, es posible que Autovacuum las omita.
-
Autovacuum no puede acceder a las tablas temporales.