Database-backed applications are nearly ubiquitous in our daily
lives. Applications that make many small accesses to the database
create two challenges for developers: increased latency and wasted
resources from numerous network round trips. A well-known technique
to improve transactional database application performance is
to convert part of the application into stored procedures that are
executed on the database server. Unfortunately, this conversion is
often difficult. In this paper we describe Pyxis, a system that takes
database-backed applications and automatically partitions their code
into two pieces, one of which is executed on the application server
and the other on the database server. Pyxis profiles the application
and server loads, statically analyzes the code’s dependencies,
and produces a partitioning that minimizes the number of control
transfers as well as the amount of data sent during each transfer.
Our experiments using TPC-C and TPC-W show that Pyxis
is able to generate partitions with up to 3× reduction in latency and
1.7× improvement in throughput when compared to a traditional
non-partitioned implementation and has comparable performance
to that of a custom stored procedure implementation.