Tengo una tabla con 200 GB de tamaño ocupada por datos y 180 GB de tamaño por los 6 índices. Tiene un 30% de hinchazón, por lo que quiero recuperar el espacio no deseado que ocupa. Se agrupa en el job_id_idíndice x.
Entonces, para recuperar el espacio, ¿debo usar el clustercomando o el vacuum fullcomando?
¿Cuál es la diferencia entre estos dos comandos?
¿El
vacuum fullorden por alguna columna es igual alclustercomando?¿Se recrea el índice en ambos comandos?
En mi caso, ¿cuál será más rápido?
La versión de la base de datos PostgreSQL es 9.1

Respuestas:
Para comprobar qué
CLUSTERhace, tomé una tabla mía de un experimento anterior que básicamente contenía los primeros 10 millones de enteros positivos. Ya eliminé algunas filas y también hay otra columna, pero estas solo afectan el tamaño real de la tabla, por lo que no es tan interesante.Primero, después de correr
VACUUM FULLsobre la mesafka, tomé su tamaño:Luego, veamos el orden físico de los datos desde el comienzo de la tabla:
Ahora eliminemos algunas filas:
Después de esto, el tamaño de la tabla informada no cambió. Entonces, veamos ahora qué
CLUSTERhace:Después de la operación, el tamaño de la tabla cambió de 338 a 296 MB. En la
ctidcolumna, que describe el lugar físico de la tupla en la página, también ve que no hay ningún espacio dondeid = 5solía estar la coincidencia de filas .A medida que se reordenaron las tuplas, los índices deberían haberse recreado para que apuntaran a los lugares correctos.
Entonces, la diferencia parece ser que
VACUUM FULLno ordena las filas. Hasta donde yo sé, hay alguna diferencia en el mecanismo que usan los dos comandos, pero desde un punto de vista práctico, esta parece ser la principal (¿única?) Diferencia.fuente
ctidcolumna. Resulta que es una columna del sistema que describe la ubicación física de la fila dentro de su tabla. postgresql.org/docs/current/ddl-system-columns.htmlhttp://www.postgresql.org/docs/9.1/static/sql-vacuum.html
http://www.postgresql.org/docs/9.1/static/sql-cluster.html
también interesante: is-a-reindex-required-after-cluster
Pero tal vez todo lo que necesita es un simple
REINDEXque reconstruya un índice utilizando los datos almacenados en la tabla del índice, reemplazando la copia anterior del índice.http://www.postgresql.org/docs/9.1/static/sql-reindex.html
fuente