VACÍO: recolecta basura y, opcionalmente, analiza una base de datos

Sinopsis

VACUUM [(option[,...])][ table_and_columns [,...]]
VACUUM [FULL][ FREEZE ][ VERBOSE ][ANALYZE][ table_and_columns [,...]]whereoption can be one of:

    FULL[boolean]
    FREEZE [boolean]
    VERBOSE [boolean]ANALYZE[boolean]
    DISABLE_PAGE_SKIPPING [boolean]
    SKIP_LOCKED [boolean]
    INDEX_CLEANUP [boolean]TRUNCATE[boolean]
    PARALLEL integerand table_and_columns is:

    table_name [( column_name [,...])]

Descripción

VACUUM recupera el almacenamiento ocupado por tuplas muertas. En el funcionamiento normal de PostgreSQL, las tuplas que se eliminan u obsoletas por una actualización no se eliminan físicamente de su tabla; permanecen presentes hasta un VACUUM está hecho. Por eso es necesario hacer VACUUM periódicamente, especialmente en tablas que se actualizan con frecuencia.

Sin un table_and_columns lista, VACUUM procesa cada tabla y vista materializada en la base de datos actual que el usuario actual tiene permiso para aspirar. Con una lista, VACUUM procesa solo esas tablas.

VACUUM ANALYZE realiza un VACUUM y luego un ANALYZE para cada mesa seleccionada. Este es un formulario de combinación útil para los scripts de mantenimiento de rutina. Consulte ANALIZAR para obtener más detalles sobre su procesamiento.

Sencillo VACUUM (sin FULL) simplemente recupera espacio y lo pone a disposición para su reutilización. Esta forma del comando puede operar en paralelo con la lectura y escritura normales de la tabla, ya que no se obtiene un bloqueo exclusivo. Sin embargo, el espacio adicional no se devuelve al sistema operativo (en la mayoría de los casos); simplemente se mantiene disponible para su reutilización dentro de la misma tabla. También nos permite aprovechar múltiples CPU para procesar índices. Esta característica se conoce como vacío paralelo. Para deshabilitar esta función, se puede usar PARALLEL opción y especifique los trabajadores paralelos como cero. VACUUM FULL reescribe todo el contenido de la tabla en un nuevo archivo de disco sin espacio adicional, lo que permite que el espacio no utilizado se devuelva al sistema operativo. Este formulario es mucho más lento y requiere un bloqueo exclusivo en cada mesa mientras se procesa.

Cuando la lista de opciones está entre paréntesis, las opciones se pueden escribir en cualquier orden. Sin paréntesis, las opciones deben especificarse exactamente en el orden que se muestra arriba. La sintaxis entre paréntesis se agregó en PostgreSQL 9.0; la sintaxis sin paréntesis está obsoleta.

Parámetros

FULL

Selecciona lleno vacío, que puede recuperar más espacio, pero lleva mucho más tiempo y bloquea exclusivamente la mesa. Este método también requiere espacio adicional en el disco, ya que escribe una nueva copia de la tabla y no libera la copia anterior hasta que se completa la operación. Por lo general, esto solo debe usarse cuando se necesita recuperar una cantidad significativa de espacio dentro de la mesa.

FREEZE

Selecciona agresivo congelación de tuplas. Especificando FREEZE es equivalente a realizar VACUUM con los parámetros vacuum_freeze_min_age y vacuum_freeze_table_age establecidos en cero. La congelación agresiva siempre se realiza cuando se reescribe la tabla, por lo que esta opción es redundante cuando FULL está especificado.

VERBOSE

Imprime un informe detallado de la actividad de vacío para cada tabla.

ANALYZE

Actualiza las estadísticas utilizadas por el planificador para determinar la forma más eficiente de ejecutar una consulta.

DISABLE_PAGE_SKIPPING

Normalmente, VACUUM saltará páginas según el mapa de visibilidad. Las páginas donde se sabe que todas las tuplas están congeladas siempre se pueden omitir, y aquellas en las que se sabe que todas las tuplas son visibles para todas las transacciones se pueden omitir, excepto cuando se realiza un vacío agresivo. Además, salvo cuando se realiza un vacío agresivo, es posible que se salten algunas páginas para evitar esperar a que otras sesiones terminen de utilizarlas. Esta opción deshabilita todos los comportamientos de salto de página y está diseñada para usarse solo cuando el contenido del mapa de visibilidad sea sospechoso, lo que debería suceder solo si hay un problema de hardware o software que cause daños en la base de datos.

SKIP_LOCKED

Especifica que VACUUM no debe esperar a que se libere ningún bloqueo conflictivo al comenzar a trabajar en una relación: si una relación no se puede bloquear inmediatamente sin esperar, la relación se salta. Tenga en cuenta que incluso con esta opción, VACUUM aún puede bloquearse al abrir los índices de la relación. Adicionalmente, VACUUM ANALYZE aún puede bloquearse al adquirir filas de muestra de particiones, elementos secundarios de herencia de tabla y algunos tipos de tablas externas. Además, mientras VACUUM normalmente procesa todas las particiones de tablas particionadas especificadas, esta opción provocará VACUUM para omitir todas las particiones si hay un bloqueo en conflicto en la tabla particionada.

INDEX_CLEANUP

Especifica que VACUUM debe intentar eliminar las entradas de índice que apuntan a tuplas muertas. Este es normalmente el comportamiento deseado y es el predeterminado a menos que el vacuum_index_cleanup La opción se ha establecido en false para aspirar la mesa. Configurar esta opción para false puede ser útil cuando es necesario hacer que el vacío se ejecute lo más rápido posible, por ejemplo, para evitar un envolvimiento de ID de transacción inminente (consulte la Sección 24.1.5). Sin embargo, si la limpieza del índice no se realiza con regularidad, el rendimiento puede verse afectado, ya que a medida que se modifica la tabla, los índices acumularán tuplas muertas y la propia tabla acumulará punteros de línea muerta que no se pueden eliminar hasta que se complete la limpieza del índice. Esta opción no tiene ningún efecto para las tablas que no tienen un índice y se ignora si el FULL se utiliza la opción.

TRUNCATE

Especifica que VACUUM debe intentar truncar las páginas vacías al final de la tabla y permitir que el espacio en disco para las páginas truncadas sea devuelto al sistema operativo. Este es normalmente el comportamiento deseado y es el predeterminado a menos que el vacuum_truncate La opción se ha establecido en false para aspirar la mesa. Configurar esta opción para false puede ser útil evitar ACCESS EXCLUSIVE bloqueo en la mesa que requiere el truncamiento. Esta opción se ignora si el FULL se utiliza la opción.

PARALLEL

Realice las fases de limpieza de índice y vacío de VACUUM en paralelo usando integer trabajadores en segundo plano (para obtener detalles de cada fase de vacío, consulte la Tabla 27.37). El número de trabajadores utilizados para realizar la operación es igual al número de índices de la relación que soportan el vacío paralelo que está limitado por el número de trabajadores especificado con PARALLEL opción, si la hay, que está más limitada por max_parallel_maintenance_workers. Un índice puede participar en el vacío paralelo si y solo si el tamaño del índice es mayor que min_parallel_index_scan_size. Tenga en cuenta que no se garantiza que el número de trabajadores paralelos especificado en integer se utilizará durante la ejecución. Es posible que una aspiradora funcione con menos trabajadores de los especificados, o incluso sin trabajadores. Solo se puede usar un trabajador por índice. Por lo tanto, los trabajadores paralelos se lanzan solo cuando hay al menos 2 índices en la tabla. Los trabajadores para el vacío se lanzan antes del inicio de cada fase y salen al final de la fase. Estos comportamientos pueden cambiar en una versión futura. Esta opción no se puede utilizar con el FULL opción.

boolean

Especifica si la opción seleccionada debe activarse o desactivarse. Puedes escribir TRUE, ON, o 1 para habilitar la opción, y FALSE, OFF, o 0 para deshabilitarlo. los boolean El valor también se puede omitir, en cuyo caso TRUE se supone.

integer

Especifica un valor entero no negativo que se pasa a la opción seleccionada.

table_name

El nombre (opcionalmente calificado por esquema) de una tabla específica o vista materializada para aspirar. Si la tabla especificada es una tabla particionada, se vacían todas sus particiones hoja.

column_name

El nombre de una columna específica para analizar. Predeterminado para todas las columnas. Si se especifica una lista de columnas, ANALYZE también debe especificarse.

Salidas

Cuando VERBOSE está especificado, VACUUM emite mensajes de progreso para indicar qué tabla se está procesando actualmente. También se imprimen varias estadísticas sobre las tablas.

Notas

Para aspirar una mesa, normalmente uno debe ser el propietario de la mesa o un superusuario. Sin embargo, los propietarios de bases de datos pueden aspirar todas las tablas de sus bases de datos, excepto los catálogos compartidos. (La restricción para catálogos compartidos significa que un true en toda la base de datos VACUUM solo puede ser realizado por un superusuario.) VACUUM saltará cualquier tabla que el usuario que llama no tenga permiso para aspirar.

VACUUM no se puede ejecutar dentro de un bloque de transacciones.

Para tablas con índices GIN, VACUUM (en cualquier forma) también completa cualquier inserción de índice pendiente, moviendo las entradas de índice pendientes a los lugares apropiados en la estructura principal del índice GIN. Consulte la Sección 66.4.1 para obtener más detalles.

Recomendamos que las bases de datos de producción activas se aspiren con frecuencia (al menos todas las noches) para eliminar las filas muertas. Después de agregar o eliminar una gran cantidad de filas, puede ser una buena idea emitir un VACUUM ANALYZE comando para la tabla afectada. Esto actualizará los catálogos del sistema con los resultados de todos los cambios recientes y permitirá al planificador de consultas de PostgreSQL tomar mejores decisiones en la planificación de consultas.

los FULL La opción no se recomienda para uso de rutina, pero podría ser útil en casos especiales. Un ejemplo es cuando ha eliminado o actualizado la mayoría de las filas de una tabla y le gustaría que la tabla se redujera físicamente para ocupar menos espacio en disco y permitir escaneos más rápidos de la tabla. VACUUM FULL Por lo general, encogerá la mesa más que una simple VACUUM haría.

los PARALLEL La opción se usa solo para propósitos de vacío. Si esta opción se especifica con el ANALYZE opción, no afecta ANALYZE.

VACUUM provoca un aumento sustancial en el tráfico de E / S, lo que puede provocar un rendimiento deficiente para otras sesiones activas. Por lo tanto, a veces es aconsejable utilizar la función de retardo de vacío basada en el costo. Para el vacío paralelo, cada trabajador duerme en proporción al trabajo realizado por ese trabajador. Consulte la Sección 19.4.4 para obtener más detalles.

PostgreSQL incluye un autovacío instalación que puede automatizar el mantenimiento de vacío de rutina. Para obtener más información sobre la aspiración automática y manual, consulte la Sección 24.1.

Ejemplos de

Para limpiar una sola mesa onek, analícelo para el optimizador e imprima un informe detallado de la actividad de vacío:

VACUUM (VERBOSE,ANALYZE) onek;

Compatibilidad

No hay VACUUM declaración en el estándar SQL.

Ver también

vacuumdb, Sección 19.4.4, Sección 24.1.6

Anterior Hasta próximo
ACTUALIZAR Hogar VALORES