MySQL 성능 진단 순서|슬로우 쿼리·EXPLAIN·인덱스 허브
MySQL이 느리다는 말만으로 인덱스를 추가하면 쓰기 비용과 저장 공간만 늘 수 있습니다. 이 허브는 느린 요청을 찾고, 실행 계획을 읽고, 한 가지 변경을 검증하는 순서로 SJSBiz의 데이터베이스 글을 연결합니다.
시작 전에 확보할 정보
- 느린 요청의 발생 시각과 URL 또는 작업명
- 쿼리 원문과 바인딩 값의 형태
- MySQL 버전과 테이블 행 수
- 현재 인덱스 목록과 실행 계획
- 백업·복구 및 롤백 방법
운영 로그와 쿼리에는 이메일, 전화번호, 토큰 같은 개인정보가 포함될 수 있습니다. 공유 전 값을 마스킹하고, 운영 DB에서 위험한 변경을 직접 실험하지 않습니다.
1. 느린 쿼리를 먼저 특정합니다
MySQL 슬로우 쿼리 로그 분석 절차에서 수집 기간과 기준을 정하고 반복되는 쿼리를 찾습니다. 한 번 느렸던 쿼리보다 호출 횟수와 총 소요 시간이 큰 쿼리가 전체 부하에 더 큰 영향을 줄 수 있습니다.
2. EXPLAIN으로 읽기 경로를 확인합니다
MySQL EXPLAIN 실행 계획 읽기를 기준으로 접근 방식, 예상 행 수, 사용 인덱스, 추가 작업을 확인합니다. 실행 계획은 추정치이므로 가능하면 스테이징이나 안전한 읽기 환경에서 실제 결과와 비교합니다.
3. 인덱스 후보를 검증합니다
인덱스 최적화 검증 절차에서 WHERE, JOIN, ORDER BY 조건과 기존 인덱스의 중복 여부를 확인합니다. 읽기 속도만 보지 말고 INSERT·UPDATE 비용과 디스크 증가도 함께 측정합니다.
판단표
| 관찰 | 확인할 것 | 다음 행동 |
|---|---|---|
| 예상 행 수가 매우 큼 | 필터 선택도와 통계 | 조건·통계·인덱스 후보 검토 |
| 인덱스가 있지만 사용되지 않음 | 자료형, 함수, 선택도 | 쿼리 형태와 통계 확인 |
| 정렬·임시 작업 표시 | ORDER BY, GROUP BY | 정렬 조건과 복합 인덱스 검토 |
| 단일 쿼리는 빠르나 서버가 느림 | 동시성, 잠금, 호출 횟수 | 애플리케이션 호출 패턴 확인 |
안전한 실험 순서
- 재현 가능한 쿼리와 기준 시간을 확보합니다.
- 변경 전 실행 계획과 서버 상태를 저장합니다.
- 스테이징 또는 복제 데이터에서 한 가지 변경만 적용합니다.
- 같은 데이터와 조건으로 여러 번 측정합니다.
- 읽기뿐 아니라 쓰기·잠금·저장 공간 영향을 확인합니다.
- 개선이 확인되면 배포와 롤백 절차를 작성합니다.
실험 기록표
| 쿼리 ID | 가설 | 변경 | 실행 계획 변화 | 읽기 결과 | 쓰기 영향 |
|---|---|---|---|---|---|
중단 기준
- 백업과 롤백 시간을 확인하지 못한 경우
- 대형 테이블에 잠금 영향을 모른 채 DDL을 실행하려는 경우
- 개인정보가 포함된 운영 쿼리를 외부에 그대로 공유하려는 경우
- 읽기 개선만 확인하고 쓰기 부하를 측정하지 않은 경우
데이터베이스 성능은 쿼리 한 줄뿐 아니라 데이터 분포, 호출 빈도, 동시성의 영향을 받습니다. 특정 인덱스나 설정을 만능 해결책으로 적용하지 말고 측정 결과로 판단합니다.
검증 범위: 이 허브는 진단 순서와 기존 글의 연결을 제공합니다. 운영 환경 변경 전에는 해당 MySQL 버전의 공식 문서와 호스팅 정책을 확인하고, 복구 가능한 환경에서 먼저 검증합니다.
공식 확인 자료
- MySQL 8.4 Reference: Slow Query Log — 슬로우 쿼리 로그 설정과 기록 범위
- MySQL 8.4 Reference: EXPLAIN — 실행 계획 출력과 해석 기준
- MySQL 8.4 Reference: Index Optimization — 인덱스 사용과 비용
- MySQL 8.4 Reference: Online DDL — 인덱스 변경 시 동시성과 잠금 고려사항
서버 버전에 따라 EXPLAIN 출력과 지원 옵션이 다릅니다. 현재 버전의 공식 문서를 선택하고, 운영 테이블의 DDL은 잠금·복제 지연·롤백 계획을 확인한 뒤 진행합니다.
댓글 0
첫 댓글을 남겨보세요.