03eea2098e
- 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>
42 lines
1.4 KiB
Bash
42 lines
1.4 KiB
Bash
#!/bin/zsh
|
|
# 02·04단계 공통 측정 스크립트
|
|
# 사용법: zsh run_measure.sh baseline (02단계, 인덱스 추가 전)
|
|
# zsh run_measure.sh after (04단계, 인덱스 추가 후)
|
|
|
|
PREFIX=$1
|
|
if [[ $PREFIX != baseline && $PREFIX != after ]]; then
|
|
echo "사용법: zsh run_measure.sh baseline|after" >&2; exit 1
|
|
fi
|
|
cd "${0:A:h}" || exit 1
|
|
|
|
printf "Enter password: "; read -rs DBPW; echo
|
|
|
|
db() {
|
|
mariadb --defaults-extra-file=<(printf '[client]\npassword="%s"\n' "$DBPW") \
|
|
-h chocomae.jinaju.com -u jisangs chocomae "$@"
|
|
}
|
|
|
|
# 1) EXPLAIN: 쿼리마다 JSON 파일 1개
|
|
for q in queries/*.sql; do
|
|
out="${PREFIX}_explain_${q:t:r}.json"
|
|
{ cat params.sql; printf 'EXPLAIN FORMAT=JSON '; cat "$q"; } | db -N -r > "$out" \
|
|
|| { echo "EXPLAIN 실패: $q" >&2; exit 1; }
|
|
echo "저장: $out"
|
|
done
|
|
|
|
# 2) 실행 시간: 같은 쿼리 묶음을 2회 실행 (2회차 값 사용)
|
|
for round in 1 2; do
|
|
{ cat params.sql
|
|
for q in queries/*.sql; do
|
|
echo "SELECT '=== round ${round}: ${q:t:r} ===' AS msg;"
|
|
cat "$q"
|
|
done
|
|
} | db -vvv || { echo "실행 시간 측정 실패" >&2; exit 1; }
|
|
done > "${PREFIX}_perf.txt"
|
|
echo "저장: ${PREFIX}_perf.txt"
|
|
|
|
# 3) 요약: 쿼리 이름 / 결과 행 수 / 실행 시간 (2회차)
|
|
echo
|
|
grep -E '^\| === |rows? in set|Empty set' "${PREFIX}_perf.txt" | paste - - - | grep 'round 2' \
|
|
| sed -E 's/\| === round 2: (.*) === \|/\1/; s/\t1 row in set \([0-9.]+ sec\)//'
|