Advanced PostgreSQL: Indexing, Partitioning, Replication · Lección

Diagnóstico de la fragmentación y estrategia de VACUUM

Comprenda cómo MVCC genera fragmentación en tablas e índices, cómo medirla y cómo ajustar autovacuum para mantener un alto rendimiento.

Lección 4 de 413 pasos

Diagnóstico de la fragmentación y estrategia de VACUUM es una lección gratuita de Advanced PostgreSQL: Indexing, Partitioning, Replication en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Advanced PostgreSQL: Indexing, Partitioning, Replication, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Advanced PostgreSQL: Indexing, Partitioning, Replication incluye 4 lecciones en total.

MVCC y las tuplas muertas

PostgreSQL usa MVCC: las actualizaciones y eliminaciones dejan atrás versiones antiguas de las filas llamadas tuplas muertas. Hasta que se limpian, ocupan espacio y ralentizan los análisis. Este espacio desperdiciado es el bloat.

Qué hace VACUUM

VACUUM recupera las tuplas muertas para reutilizarlas y actualiza la información de visibilidad. Normalmente no devuelve espacio al sistema operativo; VACUUM FULL sí lo hace, pero reescribe toda la tabla y adquiere un bloqueo fuerte.

Medición del bloat

Consulte el número de tuplas muertas de cada tabla en la vista de estadísticas.

SELECT relname, n_live_tup, n_dead_tup,
       last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Conceptos básicos de Autovacuum

Autovacuum se ejecuta en segundo plano y se activa cuando las tuplas muertas superan un umbral basado en el tamaño de la tabla y en el ajuste del factor de escala.

-- trigger ~ threshold + scale_factor * n_live_tup
autovacuum_vacuum_scale_factor = 0.2

Ajuste de tablas con mucha actividad

En tablas grandes que se actualizan con frecuencia, el factor de escala predeterminado del 20 % es demasiado permisivo. Redúzcalo por tabla para que vacuum se ejecute más a menudo y con menos basura acumulada.

ALTER TABLE orders SET (
  autovacuum_vacuum_scale_factor = 0.02);

Limitación de Vacuum

Autovacuum se limita a sí mismo mediante límites de coste para evitar tormentas de E/S. En hardware moderno puede aumentar autovacuum_vacuum_cost_limit para que vacuum termine más rápido.

autovacuum_vacuum_cost_limit = 2000

Desbordamiento circular del ID de transacción

VACUUM también evita el desbordamiento circular del ID de transacción, una situación catastrófica. Los procesos de vacuum agresivos contra este desbordamiento son imprescindibles y no se pueden omitir.

SELECT datname, age(datfrozenxid)
FROM pg_database ORDER BY 2 DESC;

Bloat de los índices

Los índices también sufren bloat. REINDEX CONCURRENTLY reconstruye un índice sin bloquear las escrituras y recupera su compacidad.

REINDEX INDEX CONCURRENTLY orders_pkey;

Actualizaciones HOT

Las actualizaciones de Heap-Only Tuple evitan cambios innecesarios en los índices cuando no cambia ninguna columna indexada. Dejar algo de espacio libre mediante un fillfactor más bajo facilita las actualizaciones HOT y reduce el bloat.

ALTER TABLE orders SET (fillfactor = 90);

VACUUM frente a ANALYZE

VACUUM recupera espacio; ANALYZE actualiza las estadísticas del planificador. Autovacuum hace ambas cosas, pero después de grandes cargas masivas ejecute ANALYZE manualmente para obtener planes actualizados.

ANALYZE orders;

Un hábito de monitorización

Configure alertas para detectar el aumento de n_dead_tup, el crecimiento del tamaño de la tabla con un número de filas estable y un valor alto de age(datfrozenxid). Estas señales tempranas le permiten ajustar el sistema antes de que las consultas se ralenticen.

Comprobación rápida

Una tabla grande y con mucha actividad sigue creciendo aunque el número de filas se mantenga estable. ¿Cuál es la causa probable y cómo se soluciona?

Resumen

Ha aprendido a diagnosticar el bloat causado por las tuplas muertas de MVCC, medirlo con pg_stat_user_tables, ajustar autovacuum por tabla, prevenir el desbordamiento circular de los ID y usar REINDEX CONCURRENTLY y fillfactor para mantener un alto rendimiento.

Gratis para empezar

Aprende Advanced PostgreSQL: Indexing, Partitioning, Replication con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
11
Lecciones
44

Preguntas frecuentes

¿La lección «Diagnóstico de la fragmentación y estrategia de VACUUM» es gratis?

Sí — el texto completo de «Diagnóstico de la fragmentación y estrategia de VACUUM» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Advanced PostgreSQL: Indexing, Partitioning, Replication, actualiza a CoddyKit PRO. El curso de Advanced PostgreSQL: Indexing, Partitioning, Replication incluye 4 lecciones en total.

¿Qué aprenderé en «Diagnóstico de la fragmentación y estrategia de VACUUM»?

Comprenda cómo MVCC genera fragmentación en tablas e índices, cómo medirla y cómo ajustar autovacuum para mantener un alto rendimiento. Practicas Advanced PostgreSQL: Indexing, Partitioning, Replication con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Advanced PostgreSQL: Indexing, Partitioning, Replication?

No se requiere experiencia previa. Advanced PostgreSQL: Indexing, Partitioning, Replication en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Diagnóstico de la fragmentación y estrategia de VACUUM»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Advanced PostgreSQL: Indexing, Partitioning, Replication?

Sí. Cada lección de Advanced PostgreSQL: Indexing, Partitioning, Replication incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Optimización integral del rendimiento
  2. Supervisión y alertas avanzadas
  3. Tendencias futuras de PostgreSQL
  4. Diagnóstico de la fragmentación y estrategia de VACUUM
← Volver a Advanced PostgreSQL: Indexing, Partitioning, Replication