【问题标题】:How can I tell if PostgreSQL's Autovacuum is running on UNIX?如何判断 PostgreSQL 的 Autovacuum 是否在 UNIX 上运行?
【发布时间】:2013-11-07 01:44:32
【问题描述】:

如何判断 Postgres 9.x 中的 autovacuum daemon 是否正在运行和维护数据库集群?

【问题讨论】:

    标签: postgresql unix autovacuum


    【解决方案1】:

    PostgreSQL 9.3

    确定 Autovacuum 是否正在运行

    这是特定于 UNIX 上的 Postgres 9.3 的。 对于 Windows,请参阅question

    查询 Postgres 系统表

    SELECT
      schemaname, relname,
      last_vacuum, last_autovacuum,
      vacuum_count, autovacuum_count  -- not available on 9.0 and earlier
    FROM pg_stat_user_tables;
    

    Grep 系统进程状态

    $ ps -axww | grep autovacuum
    24352 ??  Ss      1:05.33 postgres: autovacuum launcher process  (postgres)    
    

    Grep Postgres 日志

    # grep autovacuum /var/log/postgresql
    LOG:  autovacuum launcher started
    LOG:  autovacuum launcher shutting down
    

    如果您想了解有关 autovacuum 活动的更多信息,请将 log_min_messages 设置为 DEBUG1..DEBUG5。 SQL命令VACUUM VERBOSE会输出日志级别INFO的信息。


    关于 Autovacuum 守护进程,Posgres 文档指出:

    在默认配置中,autovacuuming 是开启的,相关的配置参数也被适当的设置了。

    另见:

    【讨论】:

      【解决方案2】:

      我正在使用:

      select count(*) from pg_stat_activity where query like 'autovacuum:%';
      

      在 collectd 中了解同时运行的 autovacuum 数量。

      您可能需要像这样创建一个安全功能:

      CREATE OR REPLACE FUNCTION public.pg_autovacuum_count() RETURNS bigint
      AS 'select count(*) from pg_stat_activity where query like ''autovacuum:%'';'
      LANGUAGE SQL
      STABLE
      SECURITY DEFINER;
      

      然后从 collectd 调用它。

      在早期的 Postgres 中,“query”是“current_query”,因此请根据实际情况进行更改。

      【讨论】:

      • 如果您以运行 autovacuum 的同一用户身份运行查询,则此方法有效,否则“查询”字段可能仅显示 。尤其是在 AWS/GCP 上。
      【解决方案3】:

      您还可以运行 pg_activity 来查看数据库上当前正在运行的查询。无论如何,我通常会在大多数情况下让终端保持打开状态,因为它非常很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多