Transaction Chopping: Algorithms and Performances Studies
Abstract
Chopping transactions into pieces is good for performance but may lead to non-serializable executions. Many researchers have reacted to this fact by either inventing new concurrency control mechanisms, weakening serializability, or both. We adopt a different approach. We assume a user who has access only to user-level tools such as (i) choosing between degree 2 and degree 3 isolation levels (degree 2 corresponds to level 1 in the new ANSI SQL terminology) (ii) the ability to execute a portion of a transaction using multiversion read consistency, and (iii) the ability to reorder the instructions in transaction programs; and knows the set of transactions that may run during a certain interval (users are likely to have such knowledge for online or real-time transactional applications). Given this information, our algorithm finds the finest partitioning of a set of transactions TranSet with the following property: {\em if the partitioned transactions execute serializably, then TranSet executes serializably.} This permits users to obtain more concurrency while preserving correctness. Besides obtaining more inter-transaction concurrency, chopping transactions in this way can enhance intra-transaction parallelism. The algorithm is inexpensive, running in O($n \times (e + m)$) time, once conflicts are identified, using a naive implementation where $n$ is the number of concurrent transactions in the interval, $e$ is the number of edges in the conflict graph among the transactions, and $m$ is the maximum number of accesses of any transaction. This makes it feasible to add as a tuning knob to real systems.