Wait Event 클래스의 개요

클래스설명예시 이벤트
LWLock (Lightweight Lock)PostgreSQL 내부 자원 동기화용 락BufferContent, WALInsert
LockSQL에서 명시적으로 사용하는 테이블/행 락relation, tuple, transactionid
IO디스크 읽기/쓰기 대기DataFileRead, DataFileWrite
Client클라이언트 응답 대기ClientRead, ClientWrite
IPC프로세스 간 통신 대기LatchWait, ConditionVariable
Timeout일정 시간 대기 설정StatementTimeout, LockTimeout
Activity프로세스가 작업 중임을 나타냄AutoVacuumMain, BgWriterHibernate
Extension확장 기능에서 발생한 대기pg_stat_statements 등 사용자 확장
BufferPin버퍼 고정으로 인한 대기다른 세션이 페이지 고정 중
WALWrite-Ahead Logging 작업 대기WALWrite, WALSync

쿼리 Wait Event 상태 확인

SELECT pid, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE state <> 'idle';
컬럼설명
stateactive / idle in transaction 등
wait_event_type위에서 본 클래스 명
wait_event실제 이벤트 명
query현재 실행 중인 쿼리

예시 결과

pidwait_event_typewait_eventquery
12345LockrelationUPDATE users SET ...
23456IODataFileReadSELECT * FROM orders WHERE id=...

대표적인 성능 병목 사례

상황원인Wait Event 예시대응 방안
쿼리 실행 느림디스크 I/O 병목DataFileRead인덱스 추가, 메모리 설정 증가
락 경합테이블/행에 다중 접근tuple, relation트랜잭션 짧게, Lock 분리
WAL 병목많은 쓰기 작업WALWrite, WALSyncWAL 설정 최적화, SSD 사용 권장
Autovacuum 지연내부 버퍼 충돌BufferContentAutovacuum 튜닝

분석 도구 예시

  1. pg_stat_activity: 현재 쿼리 대기 상태 파악
  2. pg_stat_io / pg_stat_database: I/O 비중 확인
  3. pg_stat_lwlock: LWLock 경쟁률 확인
  4. pg_blocking_pids(pid): 어떤 세션이 막고 있는지 추적
SELECT pg_blocking_pids(12345); -- 해당 PID를 블로킹 중인 다른 세션 파악

profile
안녕하세요. 엔텔스 TarzanDB 공식계정입니다.

0개의 댓글