我目前面临一些主键选择的问题。选择有时需要超过10秒才能返回行。我已经分析了执行计划,并验证了它是可以的
我开始用以下选项查看数据库上运行的查询:
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中等待:wait_event_type/wait_event(按计数(
然后,我转到pg_locks,看看是什么类型的锁导致了这个问题:按模式锁定最常见的锁定模式是AccessShareLock。我还看到了pid的平均锁,大约是3000。大多数锁都在分区表中(我的选择是通过主表,AccessShareLock在所有分区和分区索引中(。我将max_locks_per_transaction从128增加到5120,但没有任何改进。
我做的另一件事是运行perf-top;热函数":hash_search_with_hash_value。性能顶部
服务器机器的cpu使用率很低:20%。
你对此有什么解决方案吗?你需要更多的信息吗?
首先要从v11升级到(至少(v12。在那个版本中,分区变得更加高效,依次锁定单个分区选择。