如何判断Postgres 9.x中的自动真空守护进程是否正在运行并维护数据库集群?
PostgreSQL 9.3
确定自动真空是否正在运行
这是特定于UNIX上的Postgres 9.3的。对于 Windows,请参阅此问题。
查询邮政系统表
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 Postgres Log
# grep autovacuum /var/log/postgresql
LOG: autovacuum launcher started
LOG: autovacuum launcher shutting down
如果要了解有关自动真空活动的更多信息,请将log_min_messages
设置为 DEBUG1..DEBUG5
。SQL 命令 VACUUM VERBOSE
将在日志级别输出信息 INFO
。
关于 Autovacuum 守护进程,Posgres 文档指出:
在默认配置中,启用自动吸尘并正确设置相关配置参数。
另请参阅:
- http://www.postgresql.org/docs/current/static/routine-vacuuming.html
- http://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
我正在使用:
select count(*) from pg_stat_activity where query like '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;
并从收集中调用它。
在早期的Postgres中,"query"是"current_query",因此请根据有效的方法进行更改。
运行pg_activity以查看数据库上当前正在运行的查询。无论如何,我通常会让终端大部分时间都运行,因为它非常有用。
log_autovacuum_min_duration设置为您想要的时间长度,并且将自动执行超过时间长度将被记录。