데이터베이스 성능 문제를 조기에 발견하고 최적화하기 위해서는 DBMS별 모니터링 도구 활용이 필수입니다.
이번 글에서는 Oracle, PostgreSQL, MySQL, SQL Server 각각의 모니터링 방법과 활용 전략을 정리합니다.
1. Oracle
- v$session: 현재 세션 상태, 대기 이벤트 확인
- v$sqlarea: 캐시된 SQL, 실행 횟수, 파싱 정보 확인
- AWR (Automatic Workload Repository): 성능 통계, 보고서 생성
- ASH (Active Session History): 실시간 세션 분석
- 모니터링 팁: CPU/IO 과다 사용 세션, 병목 쿼리 확인 → 인덱스, 통계, 바인딩 변수 활용
예시 SQL:
SELECT sql_id, executions, parse_calls, disk_reads, buffer_gets FROM v$sqlarea ORDER BY buffer_gets DESC;
2. PostgreSQL
- pg_stat_activity: 현재 연결, 쿼리 상태 확인
- pg_stat_statements: SQL 실행 통계, 소프트/하드 파싱 추적
- EXPLAIN / EXPLAIN ANALYZE: 실행 계획 확인
- 모니터링 팁: 느린 쿼리 로그 활성화, 인덱스/조인 순서 점검, 통계 최신화
예시 SQL:
SELECT query, calls, total_time, rows FROM pg_stat_statements ORDER BY total_time DESC;
3. MySQL
- performance_schema: 세션, 쿼리, 인덱스 통계 확인
- SHOW PROCESSLIST: 현재 실행 쿼리, 상태 확인
- EXPLAIN / EXPLAIN ANALYZE: 쿼리 실행 계획 확인
- 모니터링 팁: 느린 쿼리 로그 활성화, 인덱스 활용, JOIN 최적화
예시 SQL:
SELECT digest_text, count_star, sum_timer_wait FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_timer_wait DESC;
4. SQL Server
- sys.dm_exec_requests: 현재 요청 상태, 대기 이벤트 확인
- sys.dm_exec_query_stats: 캐시된 SQL 실행 통계 확인
- SQL Server Profiler / Extended Events: 실시간 트레이스
- 모니터링 팁: 인덱스 사용률, 파라미터 스니핑 확인, 통계 최신화
예시 SQL:
SELECT TOP 10 qs.total_worker_time, qs.execution_count, st.text FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st ORDER BY qs.total_worker_time DESC;
5. 실전 활용 전략
- 주기적 모니터링: 일일/주간 보고서 자동 생성
- 상위 부하 SQL 우선 분석: CPU, IO, 응답 시간 기준
- 실행 계획 비교: 튜닝 전후 확인
- 통계 최신화와 히스토그램 관리: 옵티마이저 정확도 향상
- 바인딩 변수/커서 활용 점검: 커서 공유, 하드 파싱 최소화
6. 마무리
- DBMS별 모니터링 도구 활용은 성능 문제 조기 발견 → 원인 진단 → 최적화로 이어집니다.
- 실무에서는 주기적 보고서 + 실시간 모니터링을 함께 활용하여 안정적인 시스템 운영을 확보하는 것이 핵심입니다.
- 다음 학습: 파티셔닝과 커서/바인딩 상호작용, 또는 통계 수집 전략 심화