我找到了一个查询来查看真空吸尘器运行的时间,但不是当前正在运行的真空吸尘器. (
http://heatware.net/databases/postgres-tables-auto-vacuum-analyze/)
有没有要完成此任务的查询?我知道我可以点击pg_stat_activity,但是有些真空吸尘器没有表名,而是有pg_toast.pg_toast_3621837,所以这在100%的时间都不会起作用.
使用系统目录可以轻松解决此问题.我建议加入pg_locks,因为autovacuum在它正在处理的表上获取ShareUpdateExclusiveLock锁,以避免从pg_stat_activity手动解析查询.
以下查询列出了正在自动清理的表,如果要清理toast表,则解决pg_toast引用,如@Zeki链接的Postgres pg_toast in autovacuum – which table?问题中所述.
SELECT n.nspname || '.' || c.relname FROM pg_namespace n,pg_stat_activity a,pg_locks l,pg_class c WHERE a.query LIKE 'autovacuum: %' AND l.pid = a.pid AND l.mode = 'ShareUpdateExclusiveLock' AND (c.oid = l.relation OR c.reltoastrelid = l.relation) AND n.oid = c.relnamespace AND n.nspname <> 'pg_toast';
请注意,虽然pg_stat_activity和pg_locks目录在数据库之间共享,但此查询仅列出当前数据库中自动清理的表,因为pg_relation不是共享目录.