【发布时间】:2013-11-07 01:44:32
【问题描述】:
如何判断 Postgres 9.x 中的 autovacuum daemon 是否正在运行和维护数据库集群?
【问题讨论】:
标签: postgresql unix autovacuum
如何判断 Postgres 9.x 中的 autovacuum daemon 是否正在运行和维护数据库集群?
【问题讨论】:
标签: postgresql unix autovacuum
这是特定于 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 守护进程,Posgres 文档指出:
在默认配置中,autovacuuming 是开启的,相关的配置参数也被适当的设置了。
另见:
【讨论】:
我正在使用:
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”,因此请根据实际情况进行更改。
【讨论】:
您还可以运行 pg_activity 来查看数据库上当前正在运行的查询。无论如何,我通常会在大多数情况下让终端保持打开状态,因为它非常很有用。
【讨论】: