먼저 재현할 문제

slow query 문제가 나타난 입력, 직전 동작과 실제 결과를 함께 적습니다. 예를 들어 “가끔 실패”라고 쓰는 대신 정상 사례와 실패 사례를 하나씩 두고, 두 사례에서 달라진 version·설정·데이터를 표로 남깁니다.

사례 입력과 상태 결과
정상 가장 작은 정상 조건 기대한 결과
실패 한 조건만 달라진 재현 실제 오류·값

증거에서 원인 찾기

느린 query는 SQL text만이 아니라 parameter, data 분포, plan, cache·concurrency 상태와 반환 row 수를 함께 재현해야 합니다.

기대하는 행·열·순서와 NULL·중복·timezone 처리 계약을 먼저 적고 실제 결과와 execution plan을 별도로 확인합니다. slow query, execution plan, lock wait, connection, buffer hit, WAL/binlog과 디스크 지연을 함께 본다. 정상과 실패를 번갈아 실행하고, 이 원인이 맞다면 달라져야 할 값부터 확인합니다. 관련 없는 로그와 설정을 한꺼번에 바꾸지 않습니다.

최소 수정과 재확인

결과 계약을 만족하는 가장 단순한 query와 짧은 transaction에서 시작하고 index는 실제 predicate·정렬·데이터 분포를 보고 추가합니다. 쿼리 모양과 데이터 분포를 먼저 고치고 index, transaction 범위, pool과 보존 정책을 전체 부하에 맞춘다.

수정 전 실패 사례가 사라지고 기존 정상 사례가 유지돼야 합니다. 운영과 유사한 데이터 분포에서 plan, p95, lock time, rows examined, IOPS와 복구 가능성을 확인한다. 대표값, NULL, 중복, 경계 크기와 필요한 동시 실행에서 결과 정합성을 먼저 확인한 뒤 plan, rows와 I/O 비용을 비교합니다. 가장 작은 실패 입력은 자동 테스트나 실행 가능한 점검 명령으로 남깁니다.

공식 문서와 적용 범위

문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 DB 제품과 version, schema·index·통계 상태, 데이터 분포와 동시 부하에서 다시 확인합니다.