Administro una gran base de datos (algunos cientos de conciertos) que contiene tablas con varios roles, algunos de ellos con millones de registros. Algunas tablas solo reciben una gran cantidad de inserciones y eliminaciones, algunas otras pocas inserciones y una gran cantidad de actualizaciones.
La base de datos se ejecuta en PostgreSQL 8.4 en un sistema Debian 6.0 amd64 con 16 gigabytes de RAM.
La pregunta es a veces el proceso de autovacío en una tabla, lleva mucho tiempo (días) en completarse. Quiero poder decir aproximadamente cuánto tiempo llevará un comando de vacío en particular, para poder decidir si cancelarlo o no. Además, si hubiera un indicador de progreso para las operaciones de vacío de Postgres, sería realmente útil.
Editar:
No estoy buscando una solución a prueba de balas. Solo una pista aproximada sobre el número de tuplas muertas o los bytes de E / S necesarios es suficiente para decidir. Es realmente molesto no tener idea de cuándo VACUUM
terminará, en absoluto.
He visto que pg_catalog.pg_stat_all_tables
tiene una columna para la cantidad de tuplas muertas. Por lo tanto, es posible tener una estimación, incluso si eso significa que uno tiene que ir a ANALYZE
la mesa antes. Por otro lado, autovacuum_vacuum_threshold
y la autovacuum_vacuum_scale_factor
configuración por sí sola demuestra que el propio postgres sabe algo sobre la cantidad de cambio en las tablas y probablemente también lo pone en manos del DBA.
No estoy seguro de qué consulta ejecutar, porque cuando ejecuto VACUUM VERBOSE
, veo que no solo se procesan las tablas, sino también los índices.