加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL – 查询以确定哪些表当前正在被清理?

发布时间:2020-12-13 16:14:21 所属栏目:百科 来源:网络整理
导读:我找到了一个查询来查看真空吸尘器运行的时间,但不是当前正在运行的真空吸尘器. ( http://heatware.net/databases/postgres-tables-auto-vacuum-analyze/) 有没有要完成此任务的查询?我知道我可以点击pg_stat_activity,但是有些真空吸尘器没有表名,而是有pg
我找到了一个查询来查看真空吸尘器运行的时间,但不是当前正在运行的真空吸尘器. ( 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不是共享目录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读