postgresql 空table的真空需要3秒

xghobddn  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

在我们的一些系统上运行vacuum需要3秒来处理一个空表:

create table t (c int);
vacuum t; -- 3 seconds
vacuum t; -- 3 seconds
vacuum t; -- 3 seconds
...

在我的本地安装上,它只需要几毫秒。为什么在我们的一些系统上这么慢?可能是什么原因?我试图通过使用pg_stat_progress_vacuum找到什么使vacuum停止,但停止的vacuum没有显示在那里。
我的一个想法是,在这些系统上有许多表分区。举个例子:

select count(*) from pg_class;                      -- 1.903.740
select count(*) from pg_class WHERE relkind  = 'r'; --   362.800

这可能是原因吗?我如何找到并修复原因?这会延迟自动真空,因为对于所有这些表分区(99.9%都是完全冻结的数据或空分区),防止卷取的真空需要太长时间,而每个分区需要几秒钟,而实际上只需要几毫秒。

fnvucqvd

fnvucqvd1#

尝试运行vacuum verbose t,它会给予你一些细节,包括时间

相关问题