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 realizarVACUUM
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 cuandoFULL
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, mientrasVACUUM
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 elvacuum_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 elFULL
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 elvacuum_truncate
La opción se ha establecido en false para aspirar la mesa. Configurar esta opción para false puede ser útil evitarACCESS EXCLUSIVE
bloqueo en la mesa que requiere el truncamiento. Esta opción se ignora si elFULL
se utiliza la opción. PARALLEL
-
Realice las fases de limpieza de índice y vacío de
VACUUM
en paralelo usandointeger
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 conPARALLEL
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 eninteger
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 menos2
í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 elFULL
opción. boolean
-
Especifica si la opción seleccionada debe activarse o desactivarse. Puedes escribir
TRUE
,ON
, o1
para habilitar la opción, yFALSE
,OFF
, o0
para deshabilitarlo. losboolean
El valor también se puede omitir, en cuyo casoTRUE
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 |
Finalizando este artículo puedes encontrar las críticas de otros usuarios, tú todavía puedes insertar el tuyo si dominas el tema.