等待事件一般表示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是数据库的表锁或者行锁。