Files
jisangs 03eea2098e 운영 서버에서 DB index 적용 작업 진행
- 01~07 작업 문서를 운영 측정값 기준으로 정리 (문서의 DB 비밀번호 삭제)
- app_highest_record 중복 8,795행 점수 기준 정리, 인덱스 5개 + UNIQUE 키 2개 추가
- 02·04 공통 측정 스크립트와 측정 결과, comparison.txt 추가
- 서버 처리 시간 18~292배 단축, 결과 행 수 동일
- 운영 데이터 백업과 권한(비밀번호 해시) 파일은 커밋에서 제외

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 23:30:42 +09:00

167 lines
6.1 KiB
Markdown

# 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)부터 읽으세요.** 🚀