如何判断 Postgres 9.x 中的autovacuum 守护进程是否正在运行并维护数据库集群?
问问题
46990 次
3 回答
90
PostgreSQL 9.3
确定 Autovacuum 是否正在运行
这特定于 UNIX 上的 Postgres 9.3。对于 Windows,请参阅此问题。
查询 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 被启用并且相关的配置参数被适当地设置。
也可以看看:
于 2013-11-07T01:44:32.830 回答
17
我在用着:
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”,所以根据工作原理进行更改。
于 2014-07-29T09:57:12.330 回答
0
您还可以运行 pg_activity 来查看数据库上当前正在运行的查询。无论如何,我通常会在大多数情况下让终端保持打开状态,因为它非常有用。
于 2016-03-02T19:35:06.193 回答