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

zsbz8rwp  于 2023-01-20  发布在  Unix
关注(0)|答案(4)|浏览(159)

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

jv4diomz

jv4diomz1#

PostgreSQL 9.3

确定自动真空是否正在运行

这是UNIX上的Postgres 9.3所特有的。对于Windows,请参阅此question

查询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日志

# 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文件指出:
在默认配置中,启用了自动清除功能,并相应地设置了相关的配置参数。
另请参阅:

ktca8awb

ktca8awb2#

我正在使用:

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",所以根据实际情况更改它。

gopyfrb3

gopyfrb33#

你也可以运行pg_activity来查看数据库上当前正在运行的查询,我通常会让终端在大部分时间里都打开这个程序,因为它非常有用。

qyyhg6bp

qyyhg6bp4#

将log_autovacuum_min_duration设置为您所需的时间长度,并记录超过该时间长度的自动真空执行。

相关问题