Paper: POLAR: Adaptive and Non-invasive Join Order Selection via Plans of Least Resistance [link]
- Repository: POLAR (https://github.com/d-justen/duckdb-polr)
- Programming Language: C++
- Additional Programming Language info: At least a C++-11 compliant compiler is required
- Processor: AMD EPYC 7443P CPU @ 2.85 GHz
- Cores: 24 physical cores (48 vCores)
- Memory: 256 GB
- Disk: SSD, 1 TB.
- Environment: Ubuntu 20.04 LTS is used for the experiments.
- Compiler: Clang-12
Please note that we assume python3
and python3-venv
to be pre-installed and texlive not to be installed yet
(check with apt search texlive | grep -i install
). Also note that some experiments use cgroup virtualization, which
Docker does not support. We advise to run the experiments on a clean Ubuntu 20.04 (virtual) machine.
The experiments can either be run in a DuckDB-only mode (simpler setup, fewer requirements) or extensive mode
(more complex setup to reproduce third-party system baselines). The DuckDB-only mode executes all experiments on POLAR
as well as DuckDB and Lookahead Information Passing as baselines. For the remaining baselines it reuses previous
experiment results obtained from our own hardware setup. The extensive mode installs
SkinnerDB,
SkinnerMT, and Postgres,
which serve as additional baselines. Both options run the experiments, generate the figures and tables from the
experiments section and compile the resulting paper as a PDF. We advise you to run the experiments within a tmux
session as they may take a few days.
Please make sure to use the environment and compiler from the Experimentation Info above and hardware similar to the specifications in Hardware Info.
- Run
./1-prepareExperiments.sh duckdb-only
. Installs the dependencies and generates the benchmark data (JOB, SSB, SSB-skew). Estimated time: 1-2 hours. - Run
./2-runAllExperiments.sh duckdb-only
. Executes the experiments and generates the paper artifacts. Estimated time: 2-3 days. - Open
paper/main.pdf
to check the results.
In this mode, the following required dependencies are installed by the install script:
- cgroup-tools: For thread limiting
- cmake: For building
- git: For checking out the POLAR and DBGen repositories
- libssl-dev: For building DuckDB
- python3-pip: For python requirements
- TeX Live: For paper PDF compilation (including
tex-common
,texinfo
,equivs
,perl-tk
,perl-doc
) - wget: For texlive installation
Please make sure to use the environment and compiler from the Experimentation Info above and hardware similar to the specifications in Hardware Info.
- Run
./1-prepareExperiments.sh
. Installs the dependencies and generates the benchmark data (JOB, SSB, SSB-skew). This script is explicitly only tested for Ubuntu 20.04. Alternatively, SkinnerDB, SkinnerMT, and Postgres can be installed manually according to their individual instructions. The remaining (DuckDB-based) requirements can then be installed with1-prepareExperiments.sh duckdb-only
. Estimated time: 2-3 hours. - Run
./2-runAllExperiments.sh
. Executes the experiments and generates the paper artifacts. Estimated time: 3-4 days. - Open
paper/main.pdf
to check the results.
In this mode, the following required dependencies are installed by the install script:
- cgroup-tools: For thread limiting
- cmake: For building
- git: For checking out the POLAR and DBGen repositories
- libssl-dev: For building DuckDB
- openjdk-8-jre-headless: For running SkinnerDB
- openjdk-16-jre-headless: For running SkinnerMT
- postgresql-12: For Postgres baseline experiments
- python3-pip: For python requirements
- software-properties-common: For SkinnerMT installation
- TeX Live: For paper PDF compilation (including
tex-common
,texinfo
,equivs
,perl-tk
,perl-doc
) - unzip: For SkinnerDB/MT installation
- wget: For texlive installation
With runBenchmark.sh
you can execute benchmarks (JOB, SSB or SSB-skew) and specify a routing strategy, regret budget,
and number of threads.
- Run
./1-prepareExperiments.sh duckdb-only
. Installs the dependencies and generates the benchmark data (JOB, SSB, SSB-skew). Estimated time: 1-2 hours. - Run
./runBenchmark.sh
. For usage, see below.
Usage: ./runBenchmark.sh [-h] [-b benchmark] [-s strategy] [-r regret_budget] [-t threads]
Available options:
-h, --help
-b, --benchmark imdb,ssb,ssb-skew (default: imdb)
-s, --strategy init_once,opportunistic,adapt_tuple_count,adapt_window_size (default: adapt_window_size)
-r, --regret_budget float (default: 0.01)
-t, --threads integer (default: 1)
If you use POLAR, please cite our paper.
@article{justen2024polar,
author = {David Justen and
Daniel Ritter and
Campbell Fraser and
Andrew Lamb and
Nga Tran and
Allison Lee and
Thomas Bodner and
Mhd Yamen Haddad and
Steffen Zeuch and
Volker Markl and
Matthias Boehm},
title = {POLAR: Adaptive and Non-invasive Join Order Selection via Plans of Least Resistance},
journal = {Proc. {VLDB} Endow.},
volume = {17},
number = {6},
pages = {1350--1363},
year = {2024},
url = {https://www.vldb.org/pvldb/vol17/p1185-justen.pdf},
doi = {10.14778/3648160.3648175}
}