Mantener las estadísticas al día y las tablas limpias es fundamental para que tus consultas en Amazon Redshift respondan con velocidad. Conocer los comandos ANALYZE y VACUUM te permite controlar directamente el rendimiento de tu base de datos, ya sea de forma manual o complementando lo que Redshift hace de manera automática.
¿Cómo funciona el comando analyze en Redshift?
Antes de ejecutar el comando, conviene revisar el estado actual de las estadísticas. Para ello existe la tabla interna pg_statistic_indicator [0:20], que muestra cuántas filas tenía una tabla cuando se corrieron las últimas estadísticas, cuántas filas nuevas se insertaron y cuántas se eliminaron desde ese momento.
Para ubicar el identificador de una tabla específica puedes apoyarte en stv_tbl_perm [0:33], filtrando por el nombre de la tabla. Una vez localizado el ID, consultas pg_statistic_indicator y obtienes un panorama claro de los cambios pendientes de analizar.
¿De qué formas puedo ejecutar analyze?
El comando ANALYZE admite tres modalidades [1:16]:
- Por columnas específicas: útil cuando sabes exactamente qué columnas cambiaron tras un
COPY o un UPDATE. Ejemplo: ANALYZE sales(pricebyte, salesid);.
- Por predicate columns: Redshift identifica automáticamente las columnas que suelen aparecer en cláusulas
WHERE. Con ANALYZE sales PREDICATE COLUMNS; actualizas solo esas estadísticas [1:55].
- Análisis completo de la tabla: simplemente ejecutas
ANALYZE sales; y se recalculan todas las estadísticas [2:12].
Puedes correrlo manualmente cuando lo necesites, aunque lo recomendable es dejarlo en automático o programarlo en ventanas de baja transaccionalidad.
¿Cómo revisar el historial de análisis con stl_analyze?
La tabla STL_Analyze [2:30] guarda un log completo de cada análisis ejecutado. Incluye si fue un análisis full, cuántas columnas se actualizaron, el porcentaje bajo el cual se realizó y un campo llamado is_background: cuando es true, significa que lo ejecutó Redshift automáticamente; cuando es false, fue una ejecución manual del usuario [3:15].
Esta información resulta valiosa para auditar cuándo y cómo se actualizaron las estadísticas de cada tabla. Además, el comando ANALYZE alimenta directamente al explain plan, una herramienta que verás más adelante y que define cómo Redshift resuelve queries complejos basándose en esas estadísticas.
¿Qué hace el comando vacuum y cuándo usarlo?
El comando VACUUM se encarga de la limpieza física de las tablas: elimina marcas de registros borrados y reordena los datos según la sort key definida [3:48].
Para saber si una tabla necesita limpieza, consulta SVV_TABLE_INFO [4:00]. Las columnas más relevantes son:
- unsorted: porcentaje de datos desordenados.
- vacuum_sort_benefit: beneficio estimado de ejecutar un vacuum de ordenamiento.
Si una tabla muestra un 50 % desordenado, como ocurre con la tabla users en el ejemplo [4:30], vale la pena ejecutar la operación.
¿Qué tipos de vacuum existen?
Puedes elegir entre varias modalidades según la necesidad [4:50]:
VACUUM sales: operación general de limpieza.
VACUUM SORT ONLY sales TO 75 PERCENT: reordena la tabla solo si al menos el 75 % ya está ordenado; el porcentaje restante es lo que se encuentra desordenado.
VACUUM DELETE ONLY sales: elimina exclusivamente las filas marcadas como borradas tras operaciones DELETE.
VACUUM REINDEX sales: reconstruye los índices intercalados. Esta operación solo funciona en tablas con ordenamiento intercalado (interleaved sort key) [5:30].
El VACUUM REINDEX falla si la tabla no usa ese tipo de ordenamiento. Además, es una operación costosa en tiempo y recursos: depende de la cantidad de datos y del número de nodos del clúster [5:45].
¿Cuál es el costo real del ordenamiento intercalado?
El interleaved sort key ofrece excelentes resultados en consultas, pero implica sacrificios importantes [6:00]:
- Mayor tiempo en operaciones de inserción.
- Necesidad de ejecutar
VACUUM REINDEX periódicamente para mantener el rendimiento.
Si tu tabla recibe inserciones o copies con mucha frecuencia, tendrás que planificar ventanas de mantenimiento para esta operación.
¿Quién debería ejecutar estas tareas?
Depende del rol dentro del equipo [6:25]. Un DBA (database administrator) suele encargarse de mantener estadísticas y limpieza de forma rutinaria. Si eres desarrollador, quizá no lo ejecutes directamente, pero conviene que lo tengas presente: cuando tus queries pierdan rendimiento sin razón aparente, puedes solicitar una actualización de estadísticas o una limpieza de tablas específicas.
Si te quedaron dudas sobre cuándo aplicar cada tipo de vacuum o cómo interpretar las tablas de estadísticas, comparte tus preguntas en los comentarios.