나의 잡다한 노트 및 메모

모니터링을 위해 수집되야 할 DB 주요 지표와 의미 본문

DevOps/SRE

모니터링을 위해 수집되야 할 DB 주요 지표와 의미

peanutwalnut 2025. 3. 26. 15:20

PostgreSQL를 모니터링하여 Grafana 대시보드에서 “이 DB가 정상적으로 잘 동작하고 있는가?”를 유의미하게 판단하려면, 리소스 사용 현황DB 내부 지표를 균형 있게 모니터링하는 것이 핵심입니다. 아래는 실무에서 많이 활용하는 주요 지표와 각 지표가 의미하는 바를 간략히 정리한 것입니다.


1. Connection & Session

  1. Active/Idle Connections (현재 연결 수, 상태별)
    • # of active connections, # of idle connections, # of idle in transaction 등
    • PostgreSQL에서 max_connections에 가깝게 올라가면 신규 연결이 거부될 수 있으므로 주의
    • 연결 상태가 “idle in transaction” 상태로 오래 방치되면 리소스 낭비와 잠금 문제의 원인이 될 수 있음
  2. Max Connections 대비 사용량
    • 순간적으로 최대 연결 수에 도달하지 않는지 감시
    • 연결 관리(커넥션 풀 사용 등) 상태 파악에 유용

2. Throughput & Query Performance

  1. TPS(Transactions Per Second), QPS(Queries Per Second)
    • 초당 처리되는 트랜잭션(혹은 쿼리) 수, 커밋·롤백 건수
    • 애플리케이션 부하가 얼마나 있는지, 트래픽 패턴이 어떤지 파악 가능
  2. Query Latency (평균/백분위수 응답 시간)
    • 쿼리가 얼마나 빠르게 처리되고 있는지, 지연(latency)이 갑자기 높아지지 않는지 확인
    • p95, p99 같은 백분위수(latency percentile)를 모니터링하면 스파이크에 대한 조기 감지 가능
  3. Slow Queries (긴 실행 시간 쿼리 수, Top 쿼리)
    • PostgreSQL의 pg_stat_statements 또는 로그 기반으로 상위 느린 쿼리 목록 파악
    • 특정 쿼리가 병목 현상을 일으키지 않는지 모니터링

3. Locks & Wait Events

  1. Locks (Row-level, Table-level), Blocking Sessions
    • 잠금 충돌이 잦거나 오래 걸리는 세션이 있는지 확인
    • 동시에 실행되는 트랜잭션이 많을 경우 Deadlock 등이 발생할 수 있음
  2. Wait Events
    • PostgreSQL 9.6+부터 지원되는 wait event를 통해, 쿼리나 프로세스가 어떤 이벤트에서 대기하는지 파악
    • I/O, Network, LWLock(경량 락) 등 대기 유형별로 병목 지점 확인

4. Replication & WAL (고가용성 환경)

  1. Replication Lag (Streaming Replication 환경)
    • 마스터와 슬레이브(Replica) 간 지연이 없는지 체크
    • 로그 전송 속도(WAL Send/Replay) 상태를 모니터링
    • 장애 시 Switchover/Failover를 빠르게 결정하기 위해 중요
  2. WAL Write/Archive 지표
    • WAL이 정상적으로 기록·보관되고 있는지
    • wal_segment_size, checkpoint 발생 등과도 연관

5. Cache & IO Performance

  1. Cache Hit Ratio (pg_stat_database: blks_hit / (blks_hit + blks_read))
    • PostgreSQL 내부에서 디스크 I/O를 줄이기 위해 얼마나 캐시를 활용하고 있는지
    • 캐시 히트율이 낮다면 쿼리 최적화나 메모리 설정(Shared Buffer) 재점검 필요
  2. Checkpoint Activity / BGWriter Stats
    • 체크포인트가 얼마나 자주, 어떻게 발생하는지 (pg_stat_bgwriter)
    • 체크포인트가 너무 잦으면 디스크 I/O가 급격히 증가할 수 있음
  3. Disk I/O Usage (Reads/Writes) & Tablespace Usage
    • 디스크 사용량, 읽기/쓰기 IOPS, 테이블스페이스별 용량 모니터링
    • 디스크가 가득 차면 장애로 이어질 수 있으므로 선제적으로 확인

6. Table & Row Activity

  1. Rows Returned/Fetched/Inserted/Updated/Deleted
    • pg_stat_database 또는 pg_stat_user_tables 에서 누적 집계
    • 트래픽이 높은 테이블, 변경이 많은 테이블 파악에 유용
  2. Table Size / Index Size / Bloat
    • 테이블이나 인덱스가 비정상적으로 커지고 있지 않은지 체크 (pg_class, pg_stat_all_tables 등)
    • VACUUM, REINDEX 등을 통해 정리해야 하는 시점을 알 수 있음
  3. Autovacuum/Manual Vacuum Stats
    • autovacuum이 정상적으로 동작하는지, 처리 대상이 많은지 확인
    • dead tuple 누적으로 인덱스나 테이블 성능 저하가 생길 수도 있음

7. Resource Usage (시스템 레벨)

  1. CPU Usage
    • DB 서버 CPU 사용량이 갑자기 높아지지 않는지 (DB 프로세스만의 사용량도 중요)
    • 일반적으로 TPS/QPS 증가와 함께 CPU도 상승할 수 있으므로 상관관계 파악
  2. Memory Usage
    • DB 서버 전체 메모리 및 PostgreSQL 프로세스의 메모리 사용량
    • 커넥션이 폭증하거나 대형 쿼리가 많으면 메모리 부족 현상이 발생할 수 있음
  3. OS-Level Disk Usage
    • DB 파일 시스템이 가득 차지 않는지 모니터링
    • 로그 디렉터리, WAL 디렉터리 등 주요 경로에 대한 감시

8. Alerting & Anomaly Detection

  • Threshold 기반 알림: ex) DB 커넥션 80% 이상 사용, replication lag 30초 이상, CPU 사용률 90% 초과 등
  • 이상 징후 감지: 평소와 다른 급격한 메트릭 변동(트래픽 폭증, Latency 스파이크, Cache Hit Ratio 급감 등)을 빠르게 인지

'DevOps > SRE' 카테고리의 다른 글

SRE 란?  (0) 2025.04.05
모니터링 방법론  (1) 2024.09.08