¿Qué es la hinchazón de tablas en las bases de datos?

9

¿Alguien puede explicar qué significa hinchazón en términos de base de datos? Por ejemplo, ¿qué significa decir que un índice está hinchado? Intenté buscarlo, pero no hay una explicación de qué es la hinchazón, solo qué causa o por qué.

usuario84643
fuente

Respuestas:

16

Debido a cómo PostgreSQL maneja las transacciones y la concurrencia, MVCC - Control de concurrencia de versiones múltiples, puede obtener hinchazón. En PostgreSQL, cuando haces un UPDATEo DELETE, la fila no se elimina físicamente. Por un lado DELETE, simplemente marca la fila como no disponible para transacciones futuras y UPDATE, bajo el capó, se combina INSERTentonces DELETE, donde la versión anterior de la fila se marca como no disponible.

Si bien los datos están marcados como no disponibles, todavía están allí y no se puede usar el espacio. Para luego marcar el espacio como disponible para que lo use la base de datos, un proceso de vacío debe aparecer detrás de las operaciones, y marcar ese espacio disponible para que la base de datos lo use. Sin embargo, no se devuelve al sistema operativo. Eso solo sucede cuando no hay filas activas en una página completa, lo que puede ser poco común en algunas cargas de trabajo. Esto puede ser algo bueno para algunas cargas de trabajo, porque simplemente puede actualizar el espacio en las páginas individuales dentro de los archivos de datos, sin necesidad de agregar archivos de datos adicionales.

Los problemas surgen con la hinchazón cuando hay un número excesivamente grande de tuplas muertas versus tuplas vivas. Caminar y verificar todos los indicadores de visibilidad lleva tiempo, y tener más archivos de datos para una relación da como resultado una carga de E / S innecesaria adicional. La hinchazón es especialmente notable en los índices, que también pueden tener muchas tuplas muertas, a veces muchas más que la tabla. La hinchazón puede ralentizar las búsquedas y escaneos de índices, que se mostrarán aumentando lentamente los tiempos de consulta y cambiando los planes de consulta.

Puede restaurar el espacio mediante el uso de pg_reorg , pg_repack , CLUSTERo VACUUM FULL. Esto pasará y reorganizará los archivos, moverá las tuplas y reorganizará para asegurarse de que no haya tuplas muertas, lo que eliminará la hinchazón.

La hinchazón también se puede administrar de manera eficiente ajustando la VACUUMconfiguración por tabla, lo que marca el espacio de tupla muerto disponible para su reutilización en consultas posteriores.

Puede usar consultas en el Wiki de PostgreSQL relacionadas con Mostrar hinchazón de la base de datos e Hinchazón del índice para determinar cuánta hinchazón tiene y, a partir de ahí, hacer un análisis de rendimiento para ver si tiene problemas con la cantidad de hinchazón que tiene en sus tablas .

Kassandry
fuente
-1

Esto probablemente se refiere a problemas comunes con los índices en los que se agregan dos columnas al índice o hay índices superpuestos en una tabla. Es decir, múltiples índices con el mismo conjunto de columnas en ellos (haciendo innecesario uno de ellos). Revisaría todos los índices en las tablas buscando columnas superpuestas, buscando índices que son solo subconjuntos de otros índices y los eliminaría SI puede determinar que no se están utilizando.

Además de eso, a medida que se actualizan los datos en las tablas, los índices pueden fragmentarse, lo que hace que sean más grandes de lo necesario. No estoy familiarizado con postgres, pero sospecho que existen métodos para desfragmentar los índices (reconstruyendo los índices) que reducirán su tamaño en el disco.

paulbarbin
fuente