# 260915-improve-production: 운영 서버 DB 성능 개선 > 스테이징에서 성공한 인덱스 추가를 운영 서버(chocomae.jinaju.com)에 적용합니다. --- ## 📚 파일 가이드 ### 🎯 먼저 읽기 - **[00-overview.md](00-overview.md)** — 전체 개요 및 작업 일정 - 운영 사전 측정 결과 - 단계별 필요 권한 - 예상 효과 및 주의사항 ### 📋 단계별 작업 #### **Step 1: 운영 DB 현황 측정** (2026-09-15 측정 완료) - **[01-premeasure.md](01-premeasure.md)** — 권한, 테이블 크기, 월별 적재량, 기준값, 중복 확인 - 결과 요약: [result/premeasure_summary.txt](result/premeasure_summary.txt) - 주요 결과: 계정 권한은 `SELECT, ALTER`만, app_highest_record 중복 삭제 대상 8,795행 #### **Step 2: 성능 기준선 측정** - **[02-baseline.md](02-baseline.md)** — 인덱스 추가 전 성능 측정 - 지난달 측정 기준 시각 선정 (`params.sql`) - Slow query log 켜기 - 공통 측정 스크립트로 EXPLAIN 6개 + 실행 시간 측정 #### **Step 3: 중복 정리 + 인덱스 추가** - **[03-add-indexes.md](03-add-indexes.md)** — 온라인 DDL로 인덱스 추가 - app_highest_record 삭제 대상 백업 후 점수 기준으로 중복 정리 - 인덱스 5개 + UNIQUE 키 2개 추가 - 진행 상황 모니터링 - **옵션:** 쿼리 조건 수정 (DATE()/HOUR() → 범위 조건) - 추가 1,770배 성능 향상 (스테이징 기준) #### **Step 4: 개선 효과 검증** - **[04-verify.md](04-verify.md)** — 인덱스 추가 후 성능 검증 - 02와 같은 스크립트로 재측정 - EXPLAIN·결과 행 수·실행 시간 비교 - 성능 개선율 확인 #### **Step 5: 최종 체크리스트** - **[05-checklist.md](05-checklist.md)** — 모든 단계 최종 확인 - 성공 기준 검증 - slow query log 복원, 임시 권한 회수 ### 🔧 추가 문서 - **[06-rollback.md](06-rollback.md)** — 문제 발생 시 롤백 계획 - ALTER 중단, DROP INDEX 명령어 - 중복 정리 되돌리기 - 백업 복원 절차 (EC2) - **[07-post-analysis.md](07-post-analysis.md)** — 사후 분석 및 최적화 - 실제 성능 측정 결과 - 추가 개선 사항 검토 --- ## 🚀 빠른 시작 모든 명령은 `result/` 디렉터리에서 실행합니다. ```bash 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의 단계별 필요 권한](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`) - [x] **01-premeasure.md 실행** (운영 DB 현황 파악, 2026-09-15) - [x] **계정 권한 확인** (`SELECT, ALTER`만 있음) - [x] **작업 권한 임시 부여** (SUPER, 최고기록 테이블 2개 INSERT·DELETE, `mysql.slow_log` SELECT) - [x] **작업 후 임시 권한 회수** (05-checklist.md) - [ ] **02-baseline.md 실행** (기준선 측정) - [ ] **새벽 시간 예약** (02:00~03:00 권장) - [ ] **모니터링 준비** (CPU, 메모리, 프로세스) - [ ] **롤백 계획 검토** (06-rollback.md) - [ ] **팀원 통보** (예정된 작업 공지) - [x] **작업 후 임시 계정 삭제** (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](00-overview.md)부터 읽으세요.** 🚀