  UDO is a versatile tool for offline tuning of database systems for specific
workloads. UDO can consider a variety of tuning choices, reaching from picking
transaction code variants over index selections up to database system parameter
tuning. UDO uses reinforcement learning to converge to near-optimal
configurations, creating and evaluating different configurations via actual
query executions (instead of relying on simplifying cost models). To cater to
different parameter types, UDO distinguishes heavy parameters (which are
expensive to change, e.g. physical design parameters) from light parameters.
Specifically for optimizing heavy parameters, UDO uses reinforcement learning
algorithms that allow delaying the point at which the reward feedback becomes
available. This gives us the freedom to optimize the point in time and the
order in which different configurations are created and evaluated (by
benchmarking a workload sample). UDO uses a cost-based planner to minimize
reconfiguration overheads. For instance, it aims to amortize the creation of
expensive data structures by consecutively evaluating configurations using
them. We evaluate UDO on Postgres as well as MySQL and on TPC-H as well as
TPC-C, optimizing a variety of light and heavy parameters concurrently.
