Files
chocomae/doc/plan/db/260915-improve-production

260915-improve-production: 운영 서버 DB 성능 개선

스테이징에서 성공한 인덱스 추가를 운영 서버(chocomae.jinaju.com)에 적용합니다.


📚 파일 가이드

🎯 먼저 읽기

  • 00-overview.md — 전체 개요 및 작업 일정
    • 운영 사전 측정 결과
    • 단계별 필요 권한
    • 예상 효과 및 주의사항

📋 단계별 작업

Step 1: 운영 DB 현황 측정 (2026-09-15 측정 완료)

  • 01-premeasure.md — 권한, 테이블 크기, 월별 적재량, 기준값, 중복 확인
    • 결과 요약: result/premeasure_summary.txt
    • 주요 결과: 계정 권한은 SELECT, ALTER만, app_highest_record 중복 삭제 대상 8,795행

Step 2: 성능 기준선 측정

  • 02-baseline.md — 인덱스 추가 전 성능 측정
    • 지난달 측정 기준 시각 선정 (params.sql)
    • Slow query log 켜기
    • 공통 측정 스크립트로 EXPLAIN 6개 + 실행 시간 측정

Step 3: 중복 정리 + 인덱스 추가

  • 03-add-indexes.md — 온라인 DDL로 인덱스 추가
    • app_highest_record 삭제 대상 백업 후 점수 기준으로 중복 정리
    • 인덱스 5개 + UNIQUE 키 2개 추가
    • 진행 상황 모니터링
    • 옵션: 쿼리 조건 수정 (DATE()/HOUR() → 범위 조건) - 추가 1,770배 성능 향상 (스테이징 기준)

Step 4: 개선 효과 검증

  • 04-verify.md — 인덱스 추가 후 성능 검증
    • 02와 같은 스크립트로 재측정
    • EXPLAIN·결과 행 수·실행 시간 비교
    • 성능 개선율 확인

Step 5: 최종 체크리스트

  • 05-checklist.md — 모든 단계 최종 확인
    • 성공 기준 검증
    • slow query log 복원, 임시 권한 회수

🔧 추가 문서

  • 06-rollback.md — 문제 발생 시 롤백 계획

    • ALTER 중단, DROP INDEX 명령어
    • 중복 정리 되돌리기
    • 백업 복원 절차 (EC2)
  • 07-post-analysis.md — 사후 분석 및 최적화

    • 실제 성능 측정 결과
    • 추가 개선 사항 검토

🚀 빠른 시작

모든 명령은 result/ 디렉터리에서 실행합니다.

cd doc/plan/db/260915-improve-production/result
  1. 01 사전 측정·작업 권한 준비 완료 (2026-09-15)
  2. ../02-baseline.md 실행 → zsh run_measure.sh baseline
  3. ../03-add-indexes.md 실행 → 중복 백업·정리 후 add_indexes.sql
  4. ../04-verify.md 실행 → zsh run_measure.sh after
  5. ../05-checklist.md 체크리스트 완료

👤 운영 DB 접속 정보

# 임시 계정
Host: chocomae.jinaju.com
Port: 3306
User: jisangs (2026-09-15 작업 후 삭제)
Password: 문서에 적지 않음 (별도로 전달받은 값 사용)
Database: chocomae

# 권한 (2026-09-15 SHOW GRANTS로 확인)
GRANT SELECT, ALTER ON chocomae.* TO jisangs@'182.217.174.221'
# 작업 기간 임시 권한 (05단계에서 회수): SUPER, 최고기록 테이블 2개 INSERT·DELETE, mysql.slow_log SELECT

중복 삭제(DELETE), slow query log 설정(SUPER), mysql.slow_log 조회 권한은 작업 기간 동안 임시로 부여했고 05단계에서 회수합니다. 00-overview.md의 단계별 필요 권한을 참고하세요.


📁 디렉토리 구조

260915-improve-production/
├── README.md                         ← 이 파일
├── 00-overview.md                    ← 전체 개요
├── 01-premeasure.md                  ← 운영 DB 현황 측정
├── 02-baseline.md                    ← 성능 기준선 측정
├── 03-add-indexes.md                 ← 중복 정리 + 인덱스 추가
├── 04-verify.md                      ← 개선 효과 검증
├── 05-checklist.md                   ← 최종 체크리스트
├── 06-rollback.md                    ← 롤백 계획
├── 07-post-analysis.md               ← 사후 분석
└── result/                           ← 결과 파일 저장 폴더
    ├── premeasure_*                  ← 01
    ├── params.sql, queries/          ← 02·04 공통 측정 쿼리
    ├── run_measure.sh, summarize_explain.py
    ├── baseline_explain_q*.json, baseline_perf.txt
    ├── backup_app_highest_dup_rows.sql
    ├── add_indexes.sql, add_indexes_result.txt
    ├── after_explain_q*.json, after_perf.txt
    └── comparison.txt

체크리스트

운영 서버 적용 전 확인:

  • 스테이징 결과 검토 (260915-improve-stage 참고)
  • 백업 계획 수립 (EC2 EBS 스냅샷 또는 전체 mariadb-dump)
  • 01-premeasure.md 실행 (운영 DB 현황 파악, 2026-09-15)
  • 계정 권한 확인 (SELECT, ALTER만 있음)
  • 작업 권한 임시 부여 (SUPER, 최고기록 테이블 2개 INSERT·DELETE, mysql.slow_log SELECT)
  • 작업 후 임시 권한 회수 (05-checklist.md)
  • 02-baseline.md 실행 (기준선 측정)
  • 새벽 시간 예약 (02:00~03:00 권장)
  • 모니터링 준비 (CPU, 메모리, 프로세스)
  • 롤백 계획 검토 (06-rollback.md)
  • 팀원 통보 (예정된 작업 공지)
  • 작업 후 임시 계정 삭제 (2026-09-15)

📞 도움말

상황 참고
인덱스 추가 방법 03-add-indexes.md
성능 검증 방법 04-verify.md
문제 발생 시 06-rollback.md
최적화 제안 07-post-analysis.md
전체 계획 00-overview.md

📅 작업 일정

권장: 새벽 2시~3시 (트래픽 최소 시간)

시간 작업 소요
02:00 DB 백업 5분
02:05 기준선 측정 (02-baseline) 10분
02:15 중복 정리 + 인덱스 추가 (03-add-indexes) 30분
02:45 인덱스 생성 확인 5분
02:50 검증 (04-verify) 10분
03:00 체크리스트, slow log 복원, 권한 회수 (05-checklist) 10분

준비 완료! 시작하려면 00-overview.md부터 읽으세요. 🚀