Local-only CockroachDB 성능 점검 자동화 스킬. 로컬 CockroachDB 단일 노드를 띄우고(선택), 프로젝트 DDL을 로컬 DB에 적용한 뒤(seed SQL 실행 포함), 실행된 쿼리(Statement Statistics)와 선택된 쿼리의 EXPLAIN ANALYZE를 기반으로 성능 진단을 수행한다...
로컬 CockroachDB만 사용해서 다음을 반복 가능하게 수행한다(언어/프레임워크 무관).
EXPLAIN ANALYZE 측정 후 CSV 리포트 생성postgresql://...@localhost/..., 127.0.0.1, ::1 이외의 호스트면 무조건 실패한다.DROP DATABASE 같은 파괴적 작업이 포함되므로, 로컬이 아닌 URL은 절대 실행하지 않는다(스크립트가 강제해야 한다).아래 예시는 “현재 작업 디렉터리 = 프로젝트 루트”를 가정한다.
mktemp)에 DB store/벤치/아티팩트 등 “작업물”을 모두 저장하고, 최종 산출물인 CSV 리포트만 원하는 경로에 남긴다.# 작업용 임시 디렉터리(종료 시 자동 정리)
WORKDIR="$(mktemp -d)"
trap 'rm -rf "$WORKDIR"' EXIT
STORE="$WORKDIR/cockroach-store"
export CONNECTION_STRING='postgresql://root@127.0.0.1:26257/perf_db?sslmode=disable'
# 최종 산출물(리포트) 경로만 프로젝트 내/외 원하는 곳으로 지정
OUT_SQL_STATS="$(pwd)/sql_stats.csv"
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" start-crdb \
--listen-addr 127.0.0.1:26257 \
--http-addr 127.0.0.1:8081 \
--store "$STORE"
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" reset-db \
--url "$CONNECTION_STRING" \
--ddl ./path/to/ddl.sql
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" apply-sql \
--url "$CONNECTION_STRING" \
--file ./path/to/seed.sql
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" reset-sql-stats \
--url "$CONNECTION_STRING"
# 워크로드 실행(직접 수행): 서버 실행+curl / E2E / 배치 등
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" export-sql-stats \
--url "$CONNECTION_STRING" \
--since-hours 24 \
--out "$OUT_SQL_STATS"
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" stop-crdb \
--host 127.0.0.1:26257
echo "OK: report=$OUT_SQL_STATS"
bench.json와 artifacts/는 임시 디렉터리에 두고, 최종 결과 CSV만 원하는 경로에 남긴다.BENCH_JSON="$WORKDIR/bench.json"
ARTIFACTS_DIR="$WORKDIR/artifacts"
OUT_EXPLAIN="$(pwd)/explain_results.csv"
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" make-bench \
--out "$BENCH_JSON"
# BENCH_JSON을 프로젝트 쿼리로 수정한 뒤 실행
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" benchmark \
--url "$CONNECTION_STRING" \
--bench "$BENCH_JSON" \
--out "$OUT_EXPLAIN" \
--artifacts "$ARTIFACTS_DIR"
./.cockroach-data-perf, ./scripts/perf/* 등 작업 파일이 남을 수 있다(원인 추적/재현에는 유용).로컬 CockroachDB 실행(이미 떠 있으면 생략, 로컬 바인딩 강제)
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" start-crdb \ --listen-addr 127.0.0.1:26257 \ --http-addr 127.0.0.1:8081 \ --store ./.cockroach-data-perf
perf DB 초기화 + DDL 적용(DDL 파일은 반복 지정 가능)
export CONNECTION_STRING='postgresql://root@127.0.0.1:26257/perf_db?sslmode=disable' python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" reset-db \ --url "$CONNECTION_STRING" \ --ddl ./path/to/ddl.sql
시드 SQL 실행(프로젝트가 제공하는 seed SQL을 그대로 실행)
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" apply-sql \ --url "$CONNECTION_STRING" \ --file ./path/to/seed.sql
SQL 통계 리셋(이후 실행되는 “프로젝트 쿼리”만 수집하기 위함)
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" reset-sql-stats \ --url "$CONNECTION_STRING"
워크로드 실행(직접 수행)
application_name을 설정하여(DSN 파라미터) 쿼리 출처를 구분한다.실행된 쿼리 성능 리포트(CSV) 출력(개선 방안 포함)
mkdir -p ./scripts/perf python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" export-sql-stats \ --url "$CONNECTION_STRING" \ --since-hours 24 \ --out ./scripts/perf/sql_stats.csv
(선택) 정적 쿼리 발견(코드베이스 내 raw SQL 문자열 기반, best-effort)
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" discover-queries \ --repo . \ --out ./scripts/perf/queries.csv
(선택) EXPLAIN ANALYZE 벤치: 템플릿 생성 → 수정 후 실행
mkdir -p ./scripts/perf python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" make-bench \ --out ./scripts/perf/bench.json
(선택) EXPLAIN ANALYZE 실행 → CSV 출력(+ explain 원본 아티팩트 저장)
python3 "$CODEX_HOME/skills/local-crdb-perf-checker/scripts/perfcheck.py" benchmark \ --url "$CONNECTION_STRING" \ --bench ./scripts/perf/bench.json \ --out ./scripts/perf/results.csv \ --artifacts ./scripts/perf/artifacts
export-sql-stats --out <path>.csvbenchmark --out <path>.csv--artifacts)은 필요할 때만 남긴다. 무잔여 모드에서는 임시 디렉터리에 저장 후 자동 삭제하는 방식을 우선한다.