如何判断Postgres 9.x中的 autovacuum守护程序是否正在运行并维护数据库集群?
答案 0 :(得分:72)
这是针对UNIX上的Postgres 9.3。 对于Windows,请参阅此question。
SELECT
schemaname, relname,
last_vacuum, last_autovacuum,
vacuum_count, autovacuum_count -- not available on 9.0 and earlier
FROM pg_stat_user_tables;
$ ps -axww | grep autovacuum
24352 ?? Ss 1:05.33 postgres: autovacuum launcher process (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 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以查看数据库上当前正在运行的查询。我通常会在大部分时间都打开这个终端,因为它的非常非常有用。