等待事件一般表示SQL执行过程中等待获取某种资源。

可通过polar_stat_activity视图查看哪类等待事件较多:
SELECT 
    CASE WHEN wait_event_type IS NULL THEN 'CPU' ELSE wait_event_type END, 
    CASE WHEN wait_event IS NULL THEN 'CPU' ELSE wait_event END, 
    COUNT(*) AS wait_count 
FROM 
    polar_stat_activity 
WHERE 
    state='active' AND backend_type='client backend'
GROUP BY wait_event_type, wait_event ORDER BY wait_count DESC; \watch 1
  • 如果CPU等待事件持续较多,即持续大于等于CPU核数的80%,则可认为CPU存在瓶颈。
  • 如果I/O事件持续出现且较多,则认为I/O存在瓶颈。
  • 如果lwlock事件持续出现且较多,则认为lwlock争抢严重,lwlock保护的是数据库内部的数据结构。
  • 如果lock事件持续出现且较多,则认为lock争抢严重,lock是数据库的表锁或者行锁。