56

如何判断 Postgres 9.x 中的autovacuum 守护进程是否正在运行并维护数据库集群?

4

3 回答 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_messagesDEBUG1..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 回答