Postgres Autovacuum 是否会导致读取查询卡在 IOWait 等待事件中?

问题描述

我遇到过几次我的读取查询被卡住几个小时的情况,当在 pg_stat_activity 上检查时,它有 wait_event_typeIOWait。也会发生这种情况,每次发生这种情况时,该表上都会运行一个活动的自动清理程序。该表是使用 pg_partman 的分区表,我使用的是 Postgres 11。

查询的简化版

SELECT *
FROM bookings
WHERE user_id=? AND user_type=?

查询有一个索引,类似于

CREATE index_user_id_user_type ON bookings(user_id,user_type)

我注意到 Postgres 14 对分区表 (https://www.postgresql.org/docs/14/release-14.html) 上的 autovacuum 进行了优化,这让我更加怀疑 autovacuum 确实是 IOWait 卡住/挂起查询的原因

Autovacuum 现在可以分析分区表(Yuzuko Hosoya、Álvaro Herrera)

从分区插入、更新和删除元组计数现在会传播到它们的父表,因此 autovacuum 知道何时处理它们。

这可能是由自动真空引起的吗?

  • 如果是,为什么?有没有办法避免这种情况?
  • 如果不是,可能是什么原因?

Edit(1) 添加了表架构和解释计划

表架构

CREATE TABLE public.bookings (
   order_number text not null,event_timestamp with time zone not null,customer_id text not null,driver_id text,...
) PARTITION BY RANGE (event_timestamp);

解释计划:https://explain.depesz.com/s/y3YH

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)