如何判断PostgreSQL的Autovacuum是否在UNIX上运行?

时间:2013-11-07 01:44:33

标签: postgresql unix autovacuum

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

3 个答案:

答案 0 :(得分:72)

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 Log

# 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 Daemon,Posgres文档声明:

  

在默认配置中,启用autovacuuming并相应地配置相关配置参数。

另见:

答案 1 :(得分:14)

我正在使用:

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中,"查询"是" current_query"所以根据有效的方法改变它。

答案 2 :(得分:0)

您还可以运行pg_activity以查看数据库上当前正在运行的查询。我通常会在大部分时间都打开这个终端,因为它的非常非常有用。