본문으로 건너뛰기
데이터베이스 기초집LESSON 20

로그·모니터링·느린 쿼리 점검

난이도초급 → 중급
예상 시간35분
선수지식이전 강의

20강. 로그·모니터링·느린 쿼리 점검

1. 이번 강의에서 해결할 문제

API가 느려졌을 때 CPU나 인덱스를 추측으로 바꾸면 원인을 악화시킬 수 있습니다. 연결 대기, 오래 열린 트랜잭션, 순차 스캔, 사용되지 않는 인덱스와 상위 비용 쿼리를 관찰하는 순서를 만듭니다.

2. 학습 목표

3. 핵심 개념

모니터링은 지연 시간, 처리량, 오류, 포화도를 함께 봅니다. PostgreSQL 누적 통계 뷰는 연결 상태와 스캔·행 변경 패턴을 보여줍니다. pg_stat_statements는 정규화된 쿼리별 실행 통계를 제공하지만 확장 활성화와 shared_preload_libraries 설정이 필요할 수 있습니다. 로그에는 비밀과 개인정보가 남지 않도록 파라미터 기록 정책을 검토합니다.

4. 단계별 예시

파일 경로: C:\dev\game-ranking-service\database\sql\20-health.sql

database/sql/20-health.sql
SELECT pid, usename, application_name, state,
now() - xact_start AS transaction_age,
wait_event_type, wait_event
FROM pg_stat_activity
WHERE datname = current_database()
ORDER BY xact_start NULLS LAST;

SELECT schemaname, relname, seq_scan, idx_scan,
n_live_tup, n_dead_tup
FROM pg_stat_user_tables
ORDER BY seq_scan DESC;

SELECT schemaname, relname, indexrelname, idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan, indexrelname;
PowerShell · 진단 보고서 저장
New-Item -ItemType Directory -Force .\reports
psql -d game_ranking_dev -f .\database\sql\20-health.sql | Tee-Object .\reports\database-health.txt

5. 동작 원리

오래 열린 트랜잭션은 연결과 잠금을 점유하고 오래된 행 버전 정리를 방해할 수 있습니다. seq_scan이 높다는 사실만으로 문제는 아니며 작은 테이블은 순차 스캔이 더 효율적입니다. 느린 엔드포인트를 쿼리 지문과 연결하고 대표 파라미터로 실행 계획을 재현해야 원인과 개선 효과를 설명할 수 있습니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

로그·모니터링·느린 쿼리 점검 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“로그·모니터링·느린 쿼리 점검” 실습을 안전하게 진행하기 위한 판단으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2‘통계 한 번만 보고 인덱스 삭제’ 상태에 관한 “로그·모니터링·느린 쿼리 점검” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

20강. 로그·모니터링·느린 쿼리 점검 미완료 상태