TPC-H 는 의사결정 지원(데이터 웨어하우스) 벤치마크다. 업무 성격의 ad-hoc 쿼리 22개와 데이터 갱신 함수 2개(RF1 · RF2)로 구성되고, 대용량 데이터를 훑는 복잡한 쿼리를 얼마나 빨리 처리하는지 본다.[1] 결과는 QphH@Size(시간당 쿼리 수)로 낸다.
현행 규격과 도구는 3.0.1 이다.[2] 3.0 에서 가격 대비 성능 지표의 단위만 1,000배 바뀌었고 데이터 · 쿼리는 2.x 와 같다.[1:1]
| 항목 | 값 |
|---|---|
| 테이블 | 8개 — part · supplier · partsupp · customer · orders · lineitem · nation · region |
| 쿼리 | 22개 |
| 스케일 팩터 | 1 · 10 · 30 · 100 · 300 · 1000 · 3000 · 10000 · 30000 · 100000 (GB)[3] |
| 도구 | dbgen(데이터) · qgen(쿼리) |
현행 규격 페이지에서 TPC-H 의 Tools 를 따라가 신청 양식을 채우면 다운로드 링크가 이메일로 온다. 자세한 절차는 TPC 를 본다.
아래 기록은 2.18.0_rc2 도구 기준이다. 3.0.1 도 디렉터리 구성과 makefile 항목은 같다.
압축을 풀면 dbgen 디렉터리에 소스와 makefile.suite 가 있다.
unzip tpc-h-tool.zip
cd 2.18.0_rc2
ls
EULA.txt dbgen dev-tools ref_data specification.docx specification.pdf
cd dbgen
ls
BUGS README bcd2.h check_answers dbgen.dsp dss.ddl dsstypes.h permute.c qgen.c reference rnd.h shared.h text.c tpch.sln variants
HISTORY answers bm_utils.c column_split.sh dists.dss dss.h load_stub.c permute.h qgen.vcproj release.h rng64.c speed_seed.c tpcd.h tpch.vcproj varsub.c
PORTING.NOTES bcd2.c build.c config.h driver.c dss.ri makefile.suite print.c queries rnd.c rng64.h tests tpch.dsw update_release.sh
makefile.suite 를 makefile 로 복사하고 컴파일러 · 대상 DBMS · OS · 워크로드 네 항목을 채운다. 리눅스의 Oracle 을 대상으로 한 예다.
cp makefile.suite makefile
vi makefile
CC = gcc
DATABASE = ORACLE
MACHINE = LINUX
WORKLOAD = TPCH
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
# SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
# SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are: TPCH
DATABASE 는 qgen 이 쿼리 문법을 맞출 DBMS 다. 목록에 없는 엔진(Hive · Trino 등)은 가까운 것으로 두고 만든 쿼리를 손본다.
make
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o build.o build.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o driver.o driver.c
...중략...
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -O -o dbgen build.o driver.o bm_utils.o rnd.o print.o load_stub.o bcd2.o speed_seed.o text.o permute.o rng64.o -lm
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o qgen.o qgen.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -c -o varsub.o varsub.c
gcc -g -DDBNAME=\"dss\" -DLINUX -DORACLE -DTPCH -DRNG_TEST -D_FILE_OFFSET_BITS=64 -O -o qgen build.o bm_utils.o qgen.o rnd.o varsub.o text.o bcd2.o permute.o speed_seed.o rng64.o -lm
ls -l dbgen qgen
-rwxr-xr-x 1 root root 111910 Aug 2 13:01 dbgen
-rwxr-xr-x 1 root root 103060 Aug 2 13:01 qgen
dbgen 은 현재 디렉터리에 테이블별 *.tbl 파일을 만든다. -s 가 스케일 팩터(GB)다.
./dbgen -s 1 # 1 GB
./dbgen -s 100 -C 8 -S 3 # 100 GB 를 8 조각으로 나눠 3 번째 조각만
ls *.tbl
customer.tbl lineitem.tbl nation.tbl orders.tbl part.tbl partsupp.tbl region.tbl supplier.tbl
| 결과물 | 내용 |
|---|---|
*.tbl |
테이블 데이터. \| 로 구분되고 줄 끝에도 \| 가 붙는다 |
dss.ddl |
테이블 생성 DDL |
dss.ri |
참조 무결성(FK) DDL |
queries/ |
22개 쿼리 템플릿(1.sql … 22.sql). qgen 의 입력 |
qgen 은 queries/ 의 템플릿에 파라미터를 넣어 실행 가능한 SQL 을 낸다. DSS_QUERY 로 템플릿 위치를 알려 준다.
export DSS_QUERY=./queries
./qgen -s 1 1 > q1.sql # 1번 쿼리
for i in $(seq 1 22); do ./qgen -s 1 $i > q$i.sql; done
-r n 은 난수 시드, -d 는 규격 검증용 기본 파라미터다. 줄 끝 | 가 문제가 되는 적재 도구에서는 sed 's/|$//' 로 지우고 넣는다.
TPC-H 소개 — 2026-09-20 확인. https://www.tpc.org/tpch/ ↩︎ ↩︎
최신 버전 규격 · 도구 3.0.1 — 2026-09-20 확인. https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp ↩︎
TPC Benchmark H Standard Specification v3.0.1, Clause 4.1.3. https://www.tpc.org/tpc_documents_current_versions/pdf/tpc-h_v3.0.1.pdf ↩︎