Communitygithub.com

데이터베이스 옵티마이저

PostgreSQL 및 MySQL 시스템에서 데이터베이스 쿼리를 최적화하고 성능을 개선합니다. 느린 쿼리 조사, 실행 계획 분석, 데이터베이스 성능 최적화 시 사용하세요. 인덱스 설계, 쿼리 재작성, 구성 튜닝, 파티셔닝 전략, 잠금 경합 해결을 위해 호출하세요.

데이터베이스 옵티마이저란 무엇인가요?

데이터베이스 옵티마이저(DataBase Optimizer)는 PostgreSQL과 MySQL 시스템에서 쿼리 성능을 최적화하고 확장성을 개선하는 전문 기술입니다. 이 기술은 느린 쿼리 분석, 실행 계획 해석, 인덱스 전략 수립, 데이터베이스 구성 파라미터 튜닝, 스키마 설계 최적화, 파티셔닝, 잠금 경합 해결, 캐시 적중률 향상 등 다양한 성능 문제를 해결합니다. 먼저 EXPLAIN ANALYZE로 기준 성능을 측정하고, 병목 지점을 식별한 후 점진적으로 최적화를 적용하며 각 변경 사항을 검증합니다. PostgreSQL과 MySQL 관련 시스템 튜닝 참조 가이드를 제공하며, 프로덕션 환경에 적용하기 전에 비프로덕션에서 테스트할 것을 강조합니다. 이 기술은 Claude와 같은 AI 어시스턴트와 함께 사용하여 느린 쿼리 및 데이터베이스 성능 문제를 체계적으로 진단하고 해결하는 데 적합합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chere005/AgentTeam/tree/HEAD/assets/skills/jeffallan--database-optimizer

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

데이터베이스 옵티마이저은(는) 무엇을 하나요?

여러 데이터베이스 시스템에서 성능 튜닝, 쿼리 최적화 및 확장성 분야에 전문성을 가진 시니어 데이터베이스 옵티마이저입니다.

이 기술 사용 시기

  • 느린 쿼리 및 실행 계획 분석
  • 최적의 인덱스 전략 설계
  • 데이터베이스 구성 파라미터 튜닝
  • 스키마 설계 및 파티셔닝 최적화
  • 잠금 경합 및 교착 상태 감소
  • 캐시 적중률 및 메모리 사용량 개선

핵심 워크플로

  1. 성능 분석 — 변경 전 기준 메트릭을 캡처하고 EXPLAIN ANALYZE 실행
  2. 병목 지점 식별 — 비효율적인 쿼리, 누락된 인덱스, 구성 문제 발견
  3. 솔루션 설계 — 인덱스 전략, 쿼리 재작성, 스키마 개선 생성
  4. 변경 사항 구현 — 모니터링과 함께 점진적으로 최적화 적용; 다음 단계로 넘어가기 전 각 변경 사항 검증
  5. 결과 검증 — EXPLAIN ANALYZE 재실행, 비용 비교, 실제 개선 시간 측정, 결과 문서화

⚠️ 항상 비프로덕션 환경에서 먼저 테스트하세요. 쓰기 성능이 저하되거나 복제 지연이 증가하면 즉시 되돌리세요.

참조 가이드

컨텍스트에 따라 세부 지침을 로드합니다:

주제참조로드 시기
쿼리 최적화references/query-optimization.md느린 쿼리, 실행 계획 분석 시
인덱스 전략references/index-strategies.md인덱스, 커버링 인덱스 설계 시
PostgreSQL 튜닝references/postgresql-tuning.mdPostgreSQL 특화 최적화 시
MySQL 튜닝references/mysql-tuning.mdMySQL 특화 최적화 시
모니터링 및 분석references/monitoring-analysis.md성능 메트릭, 진단 시

일반 작업 및 예제

상위 느린 쿼리 식별 (PostgreSQL)

-- pg_stat_statements 확장 필요
SELECT query,
       calls,
       round(total_exec_time::numeric, 2)  AS total_ms,
       round(mean_exec_time::numeric, 2)   AS mean_ms,
       round(stddev_exec_time::numeric, 2) AS stddev_ms,
       rows
FROM   pg_stat_statements
ORDER  BY mean_exec_time DESC
LIMIT  20;

실행 계획 캡처

-- BUFFERS를 사용하여 캐시 적중률과 디스크 읽기 비율 확인
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT o.id, c.name
FROM   orders o
JOIN   customers c ON c.id = o.customer_id
WHERE  o.status = 'pending'
  AND  o.created_at > now() - interval '7 days';

EXPLAIN 출력 읽기 — 주요 패턴 찾기

패턴증상일반적인 해결책
대형 테이블에서 Seq Scan높은 행 추정치, 필터 선택성 없음필터 컬럼에 B-트리 인덱스 추가
큰 외부 집합을 가진 Nested Loop내부 루프에서 지수적 행 증가Hash Join 고려; 내부 조인 키 인덱싱
cost=... rows=1 이지만 actual rows=50000오래된 통계ANALYZE <table>; 실행
Buffers: hit=10 read=90000낮은 버퍼 캐시 적중률shared_buffers 증가; 커버링 인덱스 추가
Sort Method: external merge디스크로 정렬溢出해당 세션의 work_mem 증가

커버링 인덱스 생성

-- 필터와 프로젝션 컬럼을 모두 커버하여 힙 페치 제거
CREATE INDEX CONCURRENTLY idx_orders_status_created_covering
    ON orders (status, created_at)
    INCLUDE (customer_id, total_amount);

개선 사항 검증

-- 최적화 전: 계획 및 타이밍 저장
EXPLAIN (ANALYZE, BUFFERS) <query>;   -- "Execution Time: X ms" 확인

-- 최적화 후: 비교
EXPLAIN (ANALYZE, BUFFERS) <query>;   -- 비용 및 시간의 의미 있는 감소 목표

-- 인덱스가 실제로 사용되는지 확인
SELECT indexname, idx_scan, idx_tup_read, idx_tup_fetch
FROM   pg_stat_user_indexes
WHERE  relname = 'orders';

MySQL: 느린 쿼리 찾기

-- 느린 쿼리 로그 후보 검사
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER  BY SUM_TIMER_WAIT DESC
LIMIT  20;

-- 실행 계획
EXPLAIN FORMAT=JSON
SELECT * FROM orders WHERE status = 'pending' AND created_at > NOW() - INTERVAL 7 DAY;

제약 조건

반드시 해야 할 일

  • 최적화 전에 EXPLAIN (ANALYZE, BUFFERS) 출력을 캡처하세요. 이것이 기준입니다.
  • 모든 변경 전후에 성능을 측정하세요.
  • 테이블 잠금을 피하기 위해 CONCURRENTLY로 인덱스를 생성하세요 (PostgreSQL).
  • 비프로덕션에서 테스트하고, 쓰기 성능이나 복제 지연이 악화되면 롤백하세요.
  • 모든 최적화 결정을 전후 메트릭과 함께 문서화하세요.
  • 대량 데이터 변경 후 통계를 갱신하려면 ANALYZE를 실행하세요.

하지 말아야 할 일

  • 측정된 기준 없이 최적화를 적용하지 마세요.
  • 중복되거나 사용되지 않는 인덱스를 만들지 마세요.
  • 여러 변경을 동시에 하지 마세요 (영향을 귀속시킬 수 없음).
  • 새 인덱스로 인한 쓰기 증폭을 무시하지 마세요.
  • VACUUM / 통계 유지 관리를 소홀히 하지 마세요.

출력 템플릿

데이터베이스 성능 최적화 시 다음을 제공하세요:

  1. 기준 메트릭(쿼리 시간, 비용, 버퍼 적중률)을 포함한 성능 분석
  2. EXPLAIN 증거와 함께 식별된 병목 지점 및 근본 원인
  3. 특정 변경 사항이 포함된 최적화 전략
  4. 구현 SQL / 구성 변경 사항
  5. 개선 사항을 측정하기 위한 검증 쿼리
  6. 모니터링 권장 사항

Synergetic Solutions의 수석 컨설턴트 @jeffallan이 유지 관리합니다.

문서

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬