高 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 选择。
我目前遇到一些 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 选择。