DuckDB has an extensive benchmark suite. When making changes that have potential performance implications, it is important to run these benchmarks to detect potential performance regressions.
Getting Started
To build the benchmark suite, run the following command in the DuckDB repository:
BUILD_BENCHMARK=1 CORE_EXTENSIONS='tpch' make
Listing Benchmarks
To list all available benchmarks, run:
build/release/benchmark/benchmark_runner --list
Running Benchmarks
Running a Single Benchmark
To run a single benchmark, issue the following command:
build/release/benchmark/benchmark_runner benchmark/micro/nulls/no_nulls_addition.benchmark
The output will be printed to stdout in CSV format, in the following format:
name run timing
benchmark/micro/nulls/no_nulls_addition.benchmark 1 0.121234
benchmark/micro/nulls/no_nulls_addition.benchmark 2 0.121702
benchmark/micro/nulls/no_nulls_addition.benchmark 3 0.122948
benchmark/micro/nulls/no_nulls_addition.benchmark 4 0.122534
benchmark/micro/nulls/no_nulls_addition.benchmark 5 0.124102
You can also specify an output file using the --out flag. This will write only the timings (delimited by newlines) to that file.
build/release/benchmark/benchmark_runner benchmark/micro/nulls/no_nulls_addition.benchmark --out=timings.out
The output will contain the following:
0.182472
0.185027
0.184163
0.185281
0.182948
Running Multiple Benchmark Using a Regular Expression
You can also use a regular expression to specify which benchmarks to run.
Be careful of shell expansion of certain regex characters (e.g., * will likely be expanded by your shell, hence this requires proper quoting or escaping).
build/release/benchmark/benchmark_runner "benchmark/micro/nulls/.*"
Running All Benchmarks
Not specifying any argument will run all benchmarks.
build/release/benchmark/benchmark_runner
Other Options
The --info flag gives you some other information about the benchmark.
build/release/benchmark/benchmark_runner benchmark/micro/nulls/no_nulls_addition.benchmark --info
display_name:NULL Addition (no nulls)
group:micro
subgroup:nulls
The --query flag will print the query that is run by the benchmark.
SELECT min(i + 1) FROM integers;
The --profile flag will output a query tree.