PostgreSQL 15集群大量查询等待MultiXactOffset相关锁问题求助
PostgreSQL 15集群突发性能异常排查求助
问题背景
我们的PostgreSQL 15集群今日突发性能暴跌,数据库服务器、客户端行为及软件均未做任何变更。集群主要流量来自Ruby库Sidekiq的数据处理客户端,由1台主节点和若干流式副本组成,运行在专用硬件(戴尔服务器,400GB内存、64核Intel Xeon、10块SSD硬件RAID)上。
通过select age(now(), query_start), * from pg_stat_activity order by query_start;查询活跃语句时发现,几乎所有查询突然开始等待MultiXactOffsetSLRU和MultiXactOffsetBuffer,导致数百个查询处于active状态堆积,数据处理几乎停滞,直到15分钟后触发statement_timeout超时。
观察到的现象
- 问题仅针对数据库中的特定表
cars; - 该表的所有类型查询均受影响,甚至是通常耗时<1ms的简单查询
SELECT * FROM cars WHERE id = 123 LIMIT 1; - 问题发生时无VACUUM等后台操作运行;
- 即使客户端吞吐量远低于日常正常处理水平,问题仍会出现;
- 主节点和副本节点上查询该表均出现此问题,怀疑数据目录可能存在异常。
已尝试的操作
- 重启连接客户端;
- 重启PostgreSQL服务;
- 重启服务器;
- 执行PostgreSQL故障转移,确认问题并非特定服务器所致。
疑问
- 如何进一步调试排查该问题?
MultiXactOffsetSLRU和MultiXactOffsetBuffer是什么含义?此前从未在wait_event中见过这些项。
pg_stat_activity示例
age | 00:04:19.050777 datid | 16391 datname | production pid | 2797495 leader_pid | usesysid | 16392 usename | au application_name | sidekiq client_addr | 10.10.30.12 client_hostname | client_port | 50006 backend_start | 2023-05-01 19:30:30.85287+00 xact_start | query_start | 2023-05-01 19:30:31.486781+00 state_change | 2023-05-01 19:30:31.610657+00 wait_event_type | LWLock wait_event | MultiXactOffsetSLRU state | active backend_xid | backend_xmin | query_id | query | SELECT COUNT(*) FROM "cars" WHERE "cars"."id" = $1 LIMIT 1 backend_type | client backend
问题发生时pg_activity工具截图

内容的提问来源于stack exchange,提问作者Niels Kristian
相关产品推荐
相关产品推荐

