상위 대기 이벤트 조회
Oracle
SELECT event, total_waits, time_waited, ROUND(time_waited/100,2) AS sec_waited
FROM v$system_event
WHERE wait_class <> 'Idle'
ORDER BY time_waited DESC
FETCH FIRST 20 ROWS ONLY;
-- For real-time analysis: v$active_session_history (ASH)v$system_event는 누적 대기 이벤트를, v$active_session_history는 최근 몇 분간의 활성 세션 샘플링을 보여 준다(Diagnostics Pack 라이선스 필요).
PostgreSQL
SELECT wait_event_type, wait_event, count(*)
FROM pg_stat_activity
WHERE wait_event IS NOT NULL AND state = 'active'
GROUP BY 1, 2
ORDER BY 3 DESC;pg_stat_activity는 현재 대기 상태를 보여 준다. 반복 샘플링(polling)하면 가장 빈번한 대기 이벤트를 파악할 수 있다.
MySQL
SELECT event_name, count_star, sum_timer_wait,
ROUND(sum_timer_wait/1000000000000, 2) AS sec_waited
FROM performance_schema.events_waits_summary_global_by_event_name
WHERE count_star > 0
ORDER BY sum_timer_wait DESC
LIMIT 20;events_waits_summary_global_by_event_name은 이벤트별 총 대기 시간(피코초 단위)을 보여 준다. wait instrument가 활성화되어 있어야 한다.
SQL Server
SELECT wait_type, waiting_tasks_count, wait_time_ms,
signal_wait_time_ms, wait_time_ms - signal_wait_time_ms AS resource_wait_ms
FROM sys.dm_os_wait_stats
WHERE wait_time_ms > 0
ORDER BY wait_time_ms DESC;sys.dm_os_wait_stats는 인스턴스 시작 이후 누적된 대기 유형을 보여 준다. DBCC SQLPERF로 초기화할 수 있다.
MongoDB
db.serverStatus().wiredTiger.concurrentTransactions
// For general waits/congestion:
// db.serverStatus().globalLock and db.serverStatus().wiredTiger.cacheWiredTiger에는 고전적인 대기 이벤트가 없다. concurrentTransactions(ticket) 고갈, globalLock.currentQueue, 캐시 압박이 혼잡을 나타낸다.
Redis
CONFIG SET latency-monitor-threshold 100
LATENCY LATEST
LATENCY HISTORY command
# For the slowest commands: SLOWLOG GET 10latency monitor 임계값을 설정하면 LATENCY LATEST/HISTORY가 가장 큰 지연을 유발하는 이벤트를 보고한다.
Elasticsearch
GET _nodes/hot_threads_nodes/hot_threads는 CPU를 가장 많이 소비하는 스레드의 스택 트레이스를 보여 주어 병목을 드러낸다.