#!/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\)//'