En algunas ocasiones, y después de hacer una masiva update, inserto deletedesde una mesa, comencé VACUUM FULL ANALYZEa asegurarme de que el DB no se hinchara demasiado. Hacerlo en una base de datos de producción me ha permitido descubrir que no era una buena idea, porque podía bloquear la tabla durante un largo período de tiempo. Entonces, cancelé el proceso, quizás intenté simplemente VACUUM(no completo) o dejé AUTOVACUUMhacer más tarde lo que sea que pueda hacer.
La pregunta es: si detengo un VACIO o un AUTOVACO "a mitad de camino", ¿se pierde todo el procesamiento?
Por ejemplo, si VACUUMya encontré 1 M de filas muertas y lo detengo, ¿se pierde toda esta información? ¿VACUUM funciona de una manera totalmente transaccional ("todo o nada", como una muy buena cantidad de procesos PostgreSQL)?
Si VACUUM se puede interrumpir de forma segura sin perder todo el trabajo, ¿hay alguna forma de hacer que el vacuumtrabajo sea incremental? [Trabaje durante 100 ms, pare, espere 10 ms para permitir que no se bloquee el resto del mundo ... y así sucesivamente]. Sé que puede hacer parte de esto ajustando los parámetros de vacío automático, pero estoy pensando en la línea de poder controlar esto mediante programación, para poder hacerlo en ciertos momentos / bajo ciertas condiciones.
NOTA: Detener / cancelar / eliminar el proceso significa en este contexto:
- Si usa pgAdmin, presione el botón "Cancelar consulta".
- Si trabaja mediante programación, llame a pg_cancel_backend ().
Supongo que ambos son equivalentes. No he usado ningún comando de matar a nivel de shell / sistema.
fuente

vacuum_cost_page_hityvacuum_cost_page_missa cero.