En algunas ocasiones, y después de hacer una masiva update
, insert
o delete
desde una mesa, comencé VACUUM FULL ANALYZE
a 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é AUTOVACUUM
hacer 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 VACUUM
ya 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 vacuum
trabajo 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_hit
yvacuum_cost_page_miss
a cero.