Oracle SQL을 실제로 실행해서 튜닝하는 도구입니다. 추측이 아니라 측정으로 판단합니다. 튜닝을 몰라도 최적 SQL을 고를 수 있게 만드는 것이 목표입니다.
다운로드
설치 프로그램이 없습니다. 압축을 풀고 OracleTuner.bat 을 더블클릭하면 브라우저가 열립니다. Node와 (포함판은) Java까지 안에 들어 있어 다른 설치가 필요 없습니다.
파일 검증용 SHA-256
with-jre 814c7b814fe55897d128148882920e98cb59a262bc377ddf84a00bf07aaa8952
no-jre 2c53fec4b93344121811d6f96490d588e32619c86767c26a1bcb8f6d959b4bc4
왜 만들었나
SQL 튜닝은 경험이 필요합니다. “이 조건이 인덱스를 못 탄다”, “이건 NOT EXISTS로 바꿔야 한다” 같은 판단을 하려면 아는 게 있어야 하죠. 그런데 대부분의 개발자는 그 지식 없이도 느린 SQL을 마주합니다.
그래서 도구가 대신 여러 안을 만들어 보고, 실제로 돌려서, 가장 나은 것을 골라 주는 방향으로 만들었습니다. 사람이 할 일은 결과를 보고 채택할지 정하는 것뿐입니다.
어떻게 동작하나
1) 튜닝 후보를 자동으로 만든다
SQL을 파싱해 시도해 볼 수 있는 개선안을 생성합니다. 30여 가지 전략이 들어 있습니다.
- 날짜 함수 → 범위 조건 —
TO_CHAR(dt,'YYYYMM')='202403'을 부등호 범위로 바꿔 인덱스를 타게 - 암시적 형변환 제거 — 문자 컬럼을 숫자와 비교하면 컬럼 쪽이 변환되어 인덱스가 죽습니다
- NOT IN → NOT EXISTS, IN → EXISTS, NVL 분해, UNION → UNION ALL
- ROWNUM + ORDER BY → FETCH FIRST — 이건 성능이 아니라 결과가 틀리는 문제를 잡습니다
- 인덱스·조인 방식·조인 순서 힌트 (실제 존재하는 인덱스 이름을 읽어서 채웁니다)
각 후보마다 왜 이걸 시도하는지와 언제 효과가 있는지를 함께 보여줍니다. 그래서 쓰다 보면 배우게 됩니다.
2) 토너먼트로 실제로 재본다
원본과 후보들을 번갈아 여러 회전 실행합니다. 순차로 A를 n번, B를 n번 돌리면 뒤쪽이 캐시 덕을 봅니다. 회차마다 순서를 회전시켜 그 편향을 상쇄합니다.
측정은 결과를 끝까지 인출해서 합니다. 앞부분만 읽고 멈추면 전체 스캔의 비용이 중간에 끊겨 튜닝 전후가 똑같이 빨라 보이는 착시가 생깁니다.
3) 결과가 같은지 검증한다
빨라졌다고 끝이 아닙니다. 튜닝 후 SQL이 원본과 같은 답을 내는지 행 단위 지문(SHA-256)으로 확인합니다. 순서까지 같은지, 집합만 같은지도 구분합니다.
아무리 빨라도 결과가 다르면 순위에서 제외합니다. 대신 “왜 다른지”를 표본과 함께 보여줍니다.
4) 권한이 없어도 동작한다
운영 계정은 V$SQL이나 딕셔너리를 못 보는 경우가 흔합니다. 접속하자마자 무엇을 볼 수 있는지 하나씩 실제로 찔러보고, 막힌 기능은 가능한 것 중 최선으로 자동 강등합니다.
- 실행계획:
DBMS_XPLAN→ 계획 테이블 직접 조회 → 개인용 계획 테이블 생성 - 부하 측정: 세션 통계(논리읽기) → 없으면 시간만으로
- 결과 검증: 권한과 무관하게 항상 가능 (행을 해시로 비교하므로)
지금 무엇이 되고 안 되는지는 화면 상단 배지로 항상 보여줍니다.
그 밖에
- 4개 국어 — 한국어 / English / 日本語 / 中文
- SQL 라이브러리 — 접속별로 SQL을 폴더로 정리해 보관. 며칠에 걸친 작업도 이어서 합니다
- 힌트 위저드 — 힌트 이름을 몰라도 상황만 고르면 표·인덱스명이 자동으로 채워집니다
- 안전모드 — DML/DDL을 실행해도 실수로 데이터가 바뀌지 않도록 자동 되돌림(기본 켜짐)
- 큰 SQL — 1만 줄이 넘어도 잘림 없이 처리합니다. 주석·문자열·q-quote·한글 식별자 모두 인식
튜닝 효과를 5분 안에 확인해 보세요
말로만 “빨라진다”고 하면 믿기 어렵죠. 그래서 시험용 데이터와 예제를 함께 넣었습니다.
- [SQL 목록] → [샘플 예제] — 예제 10건이 설치됩니다
- [데모 데이터 생성] — 버튼 하나로 30만 건짜리 시험용 표·인덱스·통계까지 자동 생성 (1~2분)
- 예제를 열고 [튜닝 후보] → [후보 생성] → [토너먼트 실행]
순위·개선율·결과 동일성이 숫자로 나옵니다. 예제는 일부러 느리게 짜여 있고, 특히 암시적 형변환과 날짜 함수 조건이 차이가 가장 큽니다.
요구 사항
| OS | Windows x64 |
| Java | JRE 포함판은 불필요 / 기본판은 Java 11 이상 |
| Node.js | 불필요 (내장) |
| Oracle | 11g 이상 (JDBC 드라이버 포함) |
처음 접속할 때 서비스명을 반드시 입력하세요. Oracle Free는 보통 FREEPDB1, XE는 XEPDB1 입니다.
⚠ 베타입니다 — SQL 최종 검증은 사용자의 몫입니다
이 도구는 후보를 만들고 성능·결과를 측정하여 근거를 제시할 뿐입니다. 측정은 표본이며 실제 운영 환경(데이터량·통계·부하·바인드 값)과 다를 수 있습니다. 운영에 반영하기 전 반드시 직접 최종 검증하시고, 그 적용 책임은 사용자에게 있습니다. 제작자는 이 도구 사용으로 발생한 결과에 대해 책임지지 않습니다.
알려진 제한
- Windows x64만 제공합니다 (리눅스·macOS는 소스로 실행 가능).
V$MYSTAT권한이 없는 계정은 시간만으로 측정하므로 편차가 큽니다. 이 경우 회전 수를 5~10으로 올려 판정하세요.- 일부 안내 문구는 아직 한국어만 제공됩니다 (주요 UI는 4개 국어 완료).
- 자동 생성한 후보가 항상 문법적으로 유효하지는 않습니다. 실패한 후보는 사유와 함께 표시되며 다른 후보의 측정에는 영향을 주지 않습니다.
사용 기술 · 라이선스
- 데이터 그리드·차트: OPEN GRID (MIT) — 가이드 · GitHub
- DB 접근: Oracle JDBC (ojdbc) · Java 브리지
- Oracle Tuner 라이선스: MIT
개발자를 응원해 주세요 🙏
이 도구가 도움이 되셨다면, 개발자를 위해 아래 두 앱을 휴대폰에 설치하고 즐겨 주세요. 큰 힘이 됩니다.
앱이 만족스러우면 공유 기능으로 주위 분들께 전해 주시면 참으로 감사하겠습니다. 여력이 되면 아이폰 사용자를 위해서도 만들어 보겠습니다.