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



如何判断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设置为您想要的时间长度,并且将自动执行超过时间长度将被记录。

相关内容

最新更新