AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
¿Cómo soluciono los problemas con VACUUM en Amazon Redshift?
Mis consultas de VACUUM fallan en mi clúster de Amazon Redshift.
Descripción corta
VACUUM es una operación que consume muchos recursos y puede ralentizarse debido a lo siguiente:
- Un alto porcentaje de datos sin clasificar
- Una tabla grande con demasiadas columnas
- El uso de una clave de ordenación intercalada
- Uso irregular o poco frecuente de VACUUM
- Tablas, consultas de clúster, enunciados de lenguaje de definición de datos (DDL) o trabajos de extracción, transformación o carga (ETL) simultáneos
Utiliza la consulta svv_vacuum_progress para comprobar el estado y los detalles de la operación VACUUM.
Resolución
Solución de problemas de rendimiento de VACUUM
Nota: Lo siguiente se aplica a los clústeres de Amazon Redshift aprovisionados. Las siguientes tablas y consultas del sistema no funcionan en Amazon Redshift sin servidor.
Para comprobar si la operación VACUUM está en curso, ejecuta la siguiente consulta SVV_VACUUM_PROGRESS:
dev=# SELECT * FROM svv_vacuum_progress; table_name | status | time_remaining_estimate -----------+---------------------------------+------------------------- data8 | Vacuum: initialize merge data8 | 4m 55s (1 row)
La consulta SVV_VACUUM_PROGRESS también incluye el nombre de la tabla, el estado de VACUUM y el tiempo estimado que queda hasta que se complete. Si VACUUM no se está ejecutando, la consulta SVV_VACUUM_PROGRESS muestra el estado de la última ejecución de VACUUM. La consulta SVV_VACUUM_PROGRESS devuelve solo una fila de resultados.
Para comprobar los detalles de la tabla en la que VACUUM está en curso, ejecuta la siguiente consulta:
SELECT schema, table_id, "table", diststyle, sortkey1, sortkey_num, unsorted, tbl_rows, estimated_visible_rows, stats_off FROM svv_table_info WHERE "table" IN ('data8');
Nota: Sustituye table por el nombre de la tabla y data8 por el nombre del esquema.
Resultado de ejemplo:
Schema | table_id | table | diststyle | sortkey1 | sortkey_num | unsorted | tbl_rows | est_visible_rows | stats_off ------------+----------+-------+-----------+----------+-------------+----------+-----------+------------------+----------- testschema | 977719 | data8 | EVEN | order_id | 2 | 25.00 | 755171520 | 566378624 | 100.00
Del resultado anterior, la columna sortkey1 muestra la clave de ordenación principal.
Si la columna sortkey1 muestra INTERLEAVED, la tabla tiene una clave de ordenación intercalada.
La columna sortkey_num muestra el número de columnas de la clave de ordenación.
La columna sin ordenar muestra el porcentaje de filas que deben ordenarse.
La columna tbl_rows muestra el número total de filas, incluidas las filas eliminadas y actualizadas.
La columna estimated_visible_rows representa el número de filas que excluye las filas eliminadas.
Tras un vaciado total (eliminar y ordenar), los valores de tbl_rows y estimated_visible_rows se parecen entre sí y el valor sin ordenar llega a 0.
Nota: Los datos de la tabla se actualizan en tiempo real. Para comprobar el progreso de VACUUM, continúa ejecutando la consulta. Las filas sin clasificar disminuyen gradualmente a medida que VACUUM avanza. Para confirmar si tienes un porcentaje alto de datos sin clasificar, consulta la información de VACUUM de una tabla específica.
Ejecuta la siguiente consulta para comprobar la información de VACUUM de una tabla.
SELECT table_id, status, rows, sortedrows, blocks, eventtime FROM stl_vacuum WHERE table_id=977719 ORDER BY eventtime DESC LIMIT 20;
Nota: Sustituye 97771 por el ID de la tabla de la consulta anterior.
Resultado de ejemplo:
table_id | status | rows | sortedrows | blocks | eventtime ----------+--------------------------------+------------+------------+--------+---------------------------- 977719 | [VacuumBG] Finished | 566378640 | 0 | 23618 | 2020-05-27 06:55:33.232536 977719 | [VacuumBG] Started Delete Only | 1132757280 | 566378640 | 47164 | 2020-05-27 06:55:18.906008 977719 | Finished | 566378640 | 566378640 | 23654 | 2020-05-27 06:46:04.086842 977719 | Started | 1132757280 | 566378640 | 45642 | 2020-05-27 06:28:17.128345 (4 rows)
En el ejemplo anterior, el resultado muestra los eventos ordenados del más reciente al más antiguo:
El último VACUUM fue un VACUUM DELETE automático que comenzó el 2020-05-27 a las 06:55:18.906008 UTC y se completó en unos segundos.
Este VACUUM liberó el espacio que ocupaban las filas eliminadas. Puedes comparar los cambios en el número de bloques que ocupó la tabla desde el inicio y la finalización de VACUUM.
Nota: Amazon Redshift realiza automáticamente las operaciones VACUUM SORT y VACUUM DELETE en las tablas en segundo plano. Estos VACUUM de fondo funcionan durante los periodos de cargas reducidas y se detienen durante los periodos de carga alta. Este VACUUM automático reduce la necesidad de ejecutar el comando VACUUM.
La columna sortedrows muestra el número de filas ordenadas de la tabla. En el último VACUUM, no se ha realizado ninguna clasificación porque se trataba de una operación automática de VACUUM DELETE. Como las filas activas no se ordenaron, la fila marcada para su eliminación muestra el mismo número de filas ordenadas desde que comenzó VACUUM. Cuando se complete VACUUM DELETE, verás 0 filas ordenadas.
El VACUUM inicial que comenzó el 2020-05-27 a las 06:28:17.128345 UTC muestra un VACUUM completo. El proceso liberó el espacio de las filas eliminadas y clasificó las filas después de unos 18 minutos. Cuando se completa la operación VACUUM, la salida muestra los mismos valores para las columnas de rows y sortedrows porque VACUUM ha clasificado correctamente las filas.
En el caso de un VACUUM que ya esté en curso, continúa supervisando su rendimiento e incorporando las mejores prácticas.
Solución de errores de VACUUM
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores para la AWS CLI. Además, asegúrate de utilizar la versión más reciente de AWS CLI.
Para averiguar por qué falló una consulta de VACUUM, utiliza SYS_QUERY_HISTORY o STL_QUERY para comprobar si hay mensajes de error. Si usas STL_QUERY, debes obtener los detalles del error en STL_ERROR. Como STL_ERROR no tiene una columna de ID de consulta, busca el campo PID en STL_QUERY. A continuación, utiliza ese campo en la consulta STL_ERROR.
Ejemplo SYS_QUERY_HISTORY:
SELECT user_id, query_id, transaction_id, session_id, status, start_time, end_time, execution_time, error_message FROM sys_query_history WHERE query_id IN (<failed queries>) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | user_id | query_id | transaction_id | session_id | status | start_time | end_time | execution_time | error_message | | 100 | 915082632 | 35599398 | 1096641177 | failed | 2024-10-06 21:09:30.209587 | 2024-10
Si utilizas el enunciado execute para ejecutar la consulta VACUUM, utiliza el comando describe-statement de AWS CLI para identificar los mensajes de error.
Ejemplo de describe-statement:
aws redshift-data describe-statement --id 7c823348d-be8b-437a-9a0-db8c0ca44f0f { "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2024-10-07T16:25:27.566000+00:00", "Duration": -1, "Error": "ERROR: VACUUM cannot run inside a multiple commands statement", "HasResultSet": false, "Id": "7c823348d-be8b-437a-9a0-db8c0ca44f0f", "QueryString": "vacuum full toptem;\nvacuum full tsupport;\nvacuum full supplierxbox;\nvacuum full party;", "RedshiftPid": 10723479554, "RedshiftQueryId": 42304, "ResultRows": -1, "ResultSize": -1, "Status": "FAILED", "UpdatedAt": "2024-10-07T16:25:33.566000+00:00" }
Si el clúster está completamente inactivo, ejecuta un VACUUM MANUAL para los intentos fallidos de VACUUM. Para obtener más información, consulta Succión y análisis manuales de las tablas.
Uso de las mejores prácticas de VACUUM
Puedes mejorar el rendimiento de VACUUM con las siguientes prácticas recomendadas.
Como VACUUM es una operación que consume muchos recursos, ejecútala fuera de las horas pico.
Utiliza wlm_query_slot_count para anular temporalmente el nivel de concurrencia en una cola para una operación VACUUM.
Ejecuta la operación VACUUM con un parámetro de umbral de hasta el 99 % para tablas grandes. Determina el umbral y la frecuencia apropiados para ejecutar VACUUM. Por ejemplo, es posible que desees ejecutar VACUUM con un umbral del 100 % o tener los datos siempre ordenados. Utiliza el enfoque que optimice el rendimiento de las consultas del clúster de Amazon Redshift.
Ejecuta un VACUUM FULL o VACUUM SORT ONLY con la frecuencia suficiente para que una región de AWS con un alto contenido sin ordenar no se acumule en tablas grandes.
Si hay una gran cantidad de datos sin ordenar en una tabla grande, realiza una copia en profundidad.
Ejecuta el comando VACUUM con la opción BOOST.
Divide las tablas grandes en tablas de series temporales para mejorar el rendimiento de VACUUM. En algunos casos, cuando utilizas una tabla de series temporales, puedes satisfacer la necesidad de ejecutar VACUUM.
Elige un tipo de compresión de columnas para tablas grandes. Las filas comprimidas consumen menos espacio en disco al ordenar los datos.
Utiliza el comando ANALYZE después de la operación VACUUM para actualizar las estadísticas. El planificador de consultas usa estos valores para elegir los mejores planes.
Información relacionada
How do I troubleshoot a failed or canceled query in Amazon Redshift? (¿Cómo soluciono una consulta fallida o cancelada en Amazon Redshift?)
¿Por qué se cancela o detiene mi consulta de Amazon Redshift sin servidor?
- Temas
- Analytics
- Etiquetas
- Amazon Redshift
- Idioma
- Español

Contenido relevante
preguntada hace 10 meses
preguntada hace un año
preguntada hace un año
- Respuesta aceptada
preguntada hace un año
preguntada hace 2 años
OFICIAL DE AWSActualizada hace un año
OFICIAL DE AWSActualizada hace un año