高 lock_manager 等待事件

High lock_manager wait event

我目前遇到一些 select 主键问题。 select 有时需要 10 多秒才能到达 return 行。我分析了执行计划,确认没问题。

我开始在数据库中查看 运行ning 查询 select:

select wait_event_type, wait_event, count(1)
from pg_stat_activity
where state <> ‘idle’
and state is not null
group by wait_event_type, wait_event
order by count(1) desc;

然后看到lock_manager有很多session在等待: wait_event_type / wait_event by count

然后,我去 pg_locks 查看导致问题的锁类型:locks by mode 最常见的锁定模式是 AccessShareLock。 我还看到了 pid 的平均锁,大约是 3000。大多数锁都在分区 table 中(我的 select 正在通过主 table,而 AccessShareLock 是在所有分区和分区索引中)。 我将 max_locks_per_transaction 从 128 增加到 5120,但没有任何改进。

我做的另一件事是 运行 perf top 看看什么是“热门功能”:hash_search_with_hash_value。 perf top

服务器计算机的 cpu 使用率较低:20%。

你有什么解决办法吗?您需要更多信息吗?

第一件事是从 v11 升级到(至少)v12。在该版本中,分区变得更加高效,轮流锁定 single-partition 选择。