  There is a trend towards increased specialization of data management software
for performance reasons. In this paper, we study the automatic specialization
and optimization of database application programs -- sequences of queries and
updates, augmented with control flow constructs as they appear in database
scripts, UDFs, transactional workloads and triggers in languages such as
PL/SQL. We show how to build an optimizing compiler for database application
programs using generative programming and state-of-the-art compiler technology.
  We evaluate a hand-optimized low-level implementation of TPC-C, and identify
the key optimization techniques that account for its good performance. Our
compiler fully automates these optimizations and, applied to this benchmark,
outperforms the manually optimized baseline by a factor of two. By selectively
disabling some of the optimizations in the compiler, we derive a clinical and
precise way of obtaining insight into their individual performance
contributions.
