VACUUM - Amazon Redshift

VACUUM

Reordena las filas y recupera espacio en una tabla especificada o en todas las tablas de la base de datos actual.

nota

Solo los usuarios con los permisos de tabla necesarios pueden vaciar una tabla de forma eficaz. Si se ejecuta VACUUM sin los privilegios de tabla necesarios, la operación se completa correctamente pero no tiene ningún efecto. Para obtener una lista de los permisos de tabla válidos para ejecutar VACUUM de forma eficaz, consulte la siguiente sección de privilegios requeridos.

Amazon Redshift ordena los datos de forma automática y ejecuta VACUUM DELETE en segundo plano. Esto disminuye la necesidad de ejecutar el comando VACUUM. Para obtener más información, consulte Limpieza de tablas.

De manera predeterminada, VACUUM omite la fase de ordenación para cualquier tabla que tenga más del 95 por ciento de las filas de la tabla ordenadas. La omisión de la fase de ordenación puede mejorar significativamente el rendimiento de VACUUM. Para cambiar el orden predeterminado o eliminar el umbral de una tabla, incluya el nombre de la tabla y el parámetro TO threshold (umbral) PERCENT cuando ejecute VACUUM.

Los usuarios pueden obtener acceso a las tablas mientras se limpian. Puede realizar consultas y escribir operaciones mientras se limpia una tabla, pero cuando se ejecutan comandos de lenguaje de manipulación de datos (DML) y una limpieza de manera simultánea, ambas operaciones podrían demorar más de lo usual. Si se ejecutan las instrucciones UPDATE y DELETE durante una limpieza, el rendimiento del sistema podría reducirse. VACUUM DELETE bloquea temporalmente las operaciones UPDATE y DELETE.

Amazon Redshift realiza automáticamente una operación de limpieza DELETE ONLY en segundo plano. La operación automática de limpieza se detiene cuando los usuarios ejecutan operaciones de lenguaje de definición de datos (DDL), tales como ALTER TABLE.

nota

La sintaxis y el comportamiento del comando VACUUM de Amazon Redshift son considerablemente diferentes de la operación VACUUM de PostgreSQL. Por ejemplo, la operación VACUUM predeterminada en Amazon Redshift es VACUUM FULL, que recupera espacio en el disco y reordena todas las filas. En cambio, la operación VACUUM predeterminada en PostgreSQL solo recupera espacio y lo pone a disposición para volver a utilizarlo.

Para obtener más información, consulte Limpieza de tablas.

Privilegios necesarios

Los siguientes privilegios son necesarios para VACUUM:

  • Superusuario

  • Usuarios con el privilegio VACUUM

  • Propietario de la tabla

  • Propietario de la base de datos con quien se comparte la tabla

Sintaxis

VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ] [ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]

Parámetros

FULL

Ordena la tabla especificada (o todas las tablas en la base de datos actual) y recupera espacio en disco ocupado por filas que las operaciones UPDATE y DELETE anteriores habían marcado para eliminación. El valor predeterminado es VACUUM FULL.

Una limpieza completa no realiza una reindexación para tablas intercaladas. Para reindexar tablas intercaladas seguido por una limpieza completa, utilice la opción VACUUM REINDEX.

Por defecto, VACUUM FULL omite la fase de ordenación de cualquier tabla que ya tenga al menos 95 por ciento ordenado. Si VACUUM puede omitir la fase de ordenación, ejecuta un comando DELETE ONLY y recupera espacio en la fase de eliminación para que al menos el 95 por ciento de las filas restantes no se marque para su eliminación.  

Si no se cumple el umbral de ordenación (por ejemplo, si el 90 por ciento de las filas está ordenado) y VACUUM realiza una ordenación completa, también llevará a cabo una operación de eliminación completa y recuperará el espacio del 100 por cien de las filas eliminadas.

Puede cambiar el umbral de limpieza predeterminado solo para una tabla. Para cambiar el umbral de limpieza predeterminado de una sola tabla, incluya el nombre de la tabla y el parámetro TO threshold (umbral) PERCENT.

SORT ONLY

Ordena la tabla especificada (o todas las tablas de la base de datos actual) sin recuperar espacio liberado por filas eliminadas. Esta opción es útil cuando no es importante recuperar espacio en el disco, pero sí lo es la reordenación de nuevas filas. Una limpieza SORT ONLY reduce el tiempo transcurrido para las operaciones de limpieza cuando la región sin ordenar no contiene una gran cantidad de filas eliminadas o no abarca la región ordenada completa. Este tipo de limpieza puede ser beneficioso para las aplicaciones que no tienen limitaciones de espacio en el disco pero dependen de optimizaciones de consultas asociadas con mantener las filas de la tabla ordenadas.

Por defecto, VACUUM SORT ONLY omite cualquier tabla que ya tenga al menos 95 por ciento ordenado. Para cambiar el umbral de orden predeterminado de una tabla, incluya el nombre de la tabla y el parámetro TO threshold PERCENT cuando ejecute VACUUM.

DELETE ONLY

Amazon Redshift realiza de forma automática una operación de limpieza DELETE ONLY en segundo plano; por lo tanto, rara vez tendrá que ejecutar una limpieza DELETE ONLY.

Una VACUUM DELETE recupera espacio en disco ocupado por filas que las operaciones UPDATE y DELETE anteriores habían marcado para eliminación y compacta la tabla para liberar el espacio consumido. Una operación de limpieza DELETE ONLY no ordena los datos de la tabla.

Esta opción reduce el tiempo transcurrido en las operaciones de limpieza cuando la recuperación de espacio en el disco es importante, pero no la reordenación de nuevas filas. Esta opción también puede ser útil cuando el rendimiento de la consulta ya es óptimo y no es necesario reordenar las filas para optimizar el rendimiento de la consulta.

Por defecto, VACUUM DELETE ONLY recupera espacio para que al menos el 95 por ciento de las filas restantes no se marque para su eliminación. Para cambiar el umbral de eliminación predeterminado de una tabla, incluya el nombre de la tabla y el parámetro TO threshold PERCENT cuando ejecute VACUUM. 

Algunas operaciones, como ALTER TABLE APPEND, pueden hacer que se fragmenten las tablas. Cuando se usa la cláusula DELETE ONLY, la operación vacuum reclama espacio de las tablas fragmentadas. El mismo valor de umbral del 95 por ciento se aplica a la operación de desfragmentación.

REINDEX tablename

Analiza la distribución de los valores en columnas de claves de ordenación intercaladas y, luego, realiza una operación VACUUM completa. Si se utiliza REINDEX, se requiere un nombre de tabla.

VACUUM REINDEX toma considerablemente más tiempo que VACUUM FULL ya que realiza una ejecución adicional para analizar las claves de ordenación intercaladas. La operación de ordenación y fusión lleva más tiempo para tablas intercaladas porque es posible que la ordenación intercalada necesite reorganizar más filas que una ordenación compuesta.

Si una operación VACUUM REINDEX termina antes de completarse, la próxima VACUUM reanuda la operación de reindexación antes de realizar la operación de limpieza completa.

VACUUM REINDEX no puede utilizarse con TO threshold PERCENT. 

table_name

El nombre de una tabla que se limpiará. Si no especifica un nombre de tabla, la operación de limpieza se aplica a todas las tablas de la base de datos actual. Puede especificar cualquier tabla permanente o temporal creada por un usuario. El comando no es significativo para otros objetos, como vistas y tablas del sistema.

Si incluye el parámetro TO threshold PERCENT, se requiere un nombre de tabla.

RECLUSTER tablename

Ordena las partes de la tabla que no están ordenadas. Las partes de la tabla que ya están ordenadas gracias a la ordenación automática de tabla se dejan intactas. Este comando no fusiona los datos recién ordenados con la región ordenada. Tampoco recupera todo el espacio que está marcado para su eliminación. Cuando se completa este comando, es posible que la tabla no aparezca completamente ordenada, como lo indica el campo unsorted en SVV_TABLE_INFO.

Recomendamos que se utilice VACUUM RECLUSTER para las tablas grandes con ingesta frecuente y consultas que solo acceden a los datos más recientes.

VACUUM RECLUSTER no es compatible con TO threshold PERCENT. Si se utiliza RECLUSTER, se necesita el nombre de una tabla.

VACUUM RECLUSTER no es compatible con las tablas con claves de ordenación intercaladas y las tablas con el estilo de distribución ALL.

table_name

El nombre de una tabla que se limpiará. Puede especificar cualquier tabla permanente o temporal creada por un usuario. El comando no es significativo para otros objetos, como vistas y tablas del sistema.

TO threshold PERCENT

Una cláusula que especifica el umbral por encima del cual VACUUM omite la fase de ordenación y el umbral de destino para recuperar espacio en la fase de eliminación. El umbral de ordenación es el porcentaje de las filas totales que ya están en orden en la tabla especificada antes de la limpieza.  El umbral de eliminación es el porcentaje mínimo de las filas totales que no están marcadas para eliminación después de la limpieza.

Como VACUUM reordena las filas solo cuando el porcentaje de filas ordenadas en una tabla es inferior al límite de ordenación, en muchas ocasiones, Amazon Redshift puede reducir los tiempos de VACUUM considerablemente. Del mismo modo, cuando VACUUM no se limita a recuperar el espacio del 100 por cien de las filas marcadas para su eliminación, normalmente puede omitir la reescritura de varios bloques que contienen solo algunas filas eliminadas.

Por ejemplo, si especifica 75 como umbral, VACUUM omitirá la fase de ordenación si el 75 por ciento o más de las filas de la tabla ya se encuentran en orden. En la fase de eliminación, VACUUMS establece un objetivo de espacio de recuperación de espacio en disco para que al menos el 75 por ciento de las filas de la tabla no se marquen para su eliminación después de la limpieza. El valor de threshold debe ser un número entero comprendido entre 0 y 100. El valor predeterminado es 95. Si especifica un valor de 100, VACUUM siempre ordena la tabla a menos que esté completamente ordenada y recupera espacio de todas las filas marcadas para la eliminación. Si especifica un valor de 0, VACUUM nunca ordena la tabla y nunca recupera espacio.

Si incluye el parámetro TO threshold PERCENT, también debe especificar un nombre de tabla. VACUUM falla si se omite un nombre de tabla.

No se puede utilizar el parámetro TO threshold PERCENT con REINDEX.

BOOST

Ejecuta el comando VACUUM con recursos adicionales como espacio en disco y memoria, cuando están disponibles, Con la opción BOOST, VACUUM opera en una ventana y bloquea las eliminaciones y actualizaciones simultáneas durante la duración de la operación VACUUM. La ejecución con la opción BOOST compite con los recursos del sistema, lo que puede afectar el rendimiento de las consultas. Ejecute VACUUM BOOST cuando la carga en el sistema sea ligera; por ejemplo durante las operaciones de mantenimiento.

Cuando utilice la opción BOOST, tenga en cuenta lo siguiente:

  • Si se especifica BOOST, el valor table_name es obligatorio.

  • BOOST no es compatible con REINDEX.

  • BOOST se ignora con DELETE ONLY.

Notas de uso

Se recomienda una limpieza completa para la mayoría de las aplicaciones de Amazon Redshift. Para obtener más información, consulte Limpieza de tablas.

Antes de ejecutar una operación de limpieza, tenga en cuenta el siguiente comportamiento:

  • No se puede ejecutar VACUUM en un bloque de transacción (BEGIN … END). Para obtener más información acerca de las transacciones, consulte Aislamiento serializable.

  • Solo puede ejecutar un comando VACUUM en un clúster en un momento dado. Si intenta ejecutar varias operaciones de limpieza de manera simultánea, Amazon Redshift devuelve un error.

  • Parte del crecimiento de la tabla puede ocurrir cuando se limpian las tablas. Este comportamiento se espera cuando no hay filas eliminadas para recuperar o el nuevo orden de la tabla produce un menor nivel de compresión de datos.

  • Durante las operaciones de limpieza, se espera cierto grado de degradación en el rendimiento de las consultas. El rendimiento normal se reanuda tan pronto se completa la operación de limpieza.

  • Las operaciones de escritura simultáneas continúan durante las operaciones de limpieza, pero no se recomienda realizar operaciones de escritura durante la limpieza. Es más eficiente completar operaciones de escritura antes de ejecutar la limpieza. Además, cualquier dato que se escriba después de que se haya iniciado una operación de limpieza no se puede limpiar mediante esa operación. En este caso, es necesaria una segunda operación de limpieza.

  • Es posible que una operación de limpieza no se inicie si ya hay una operación de carga o inserción en curso. Las operaciones de limpieza requieren acceso exclusivo a tablas temporalmente para poder iniciarse. Este acceso exclusivo se requiere por poco tiempo, para que las operaciones de limpieza no bloqueen cargas e inserciones simultáneas para cualquier periodo de tiempo significativo.

  • Las operaciones de limpieza se omiten cuando no hay trabajo para realizar en una tabla en particular; no obstante, hay costos de mantenimiento asociados con descubrir que se puede omitir la operación. Si está seguro de que una tabla está limpia o no cumple con el umbral de limpieza, no ejecute una operación de limpieza.

  • Es posible que una operación de limpieza DELETE ONLY sobre una tabla pequeña no reduzca la cantidad de bloques utilizados para almacenar los datos, especialmente cuando la tabla tiene una gran cantidad de columnas o el clúster usa una gran cantidad de sectores por nodo. Estas operaciones de limpieza agregan un bloque por columna por sector a la cuenta para inserciones simultáneas en la tabla, y hay una posibilidad de que estos costos de mantenimiento superen la reducción de bloques del espacio en disco subyacente. Por ejemplo, si una tabla de 10 columnas de un clúster de 8 nodos ocupa 1000 bloques antes de una limpieza, la limpieza no reducirá la cantidad de bloques real a menos que se recuperen más de 80 bloques de espacio en disco por la eliminación de filas. (Cada bloque de datos utiliza 1 MB).

Las operaciones de limpieza automáticas se ponen en pausa si se cumple alguna de las condiciones siguientes:

  • Un usuario ejecuta una operación de lenguaje de definición de datos (DDL), como ALTER TABLE, que requiere un bloqueo exclusivo en una tabla en la que se está realizando actualmente la limpieza automática.

  • Un usuario activa VACUUM en cualquier tabla del clúster (solo se puede ejecutar una operación VACUUM cada vez).

  • Un periodo de carga elevada del clúster.

Ejemplos

Recuperar espacio y base de datos y reordenar las filas de todas las tablas en función del umbral de limpieza predeterminado de 95 por ciento.

vacuum;

Recuperar espacio y reordenar las filas de la tabla SALES en función del umbral predeterminado de 95 por ciento.

vacuum sales;

Siempre recuperar espacio y reordenar las filas de la tabla SALES.

vacuum sales to 100 percent;

Reordenar las filas de la tabla SALES solo si menos del 75 por ciento de las filas ya está ordenado.

vacuum sort only sales to 75 percent;

Recuperar espacio en la tabla SALES para que al menos el 75 por ciento de las filas restantes no se marquen para su eliminación después de la limpieza.

vacuum delete only sales to 75 percent;

Reindexar y, luego, limpiar la tabla LISTING.

vacuum reindex listing;

El siguiente comando devuelve un error.

vacuum reindex listing to 75 percent;

Recluster y, a continuación, vacuum la tabla LISTING.

vacuum recluster listing;

Recluster y, a continuación, vacuum la tabla LISTING con la opción BOOST.

vacuum recluster listing boost;