Serializability has been widely accepted as the correctness criterion for databases subject to concurrent access. However, serializability carries with it performance penalties: transactions are required to use locks in a two-phase fashion, forcing them to hold locks for long periods and delaying concurrent transactions. This is unacceptable in application requiring high performance.
To deal with this problem a number of models have recently been proposed in which transactions release locks early. Since these models violate the two-phase requirement, serializability is no longer guaranteed. Unfortunately, questions related to these models, such as ``When should locks be released?'' and ``What interleavings are correct?'' have not been addressed.
In this talk we describe a new, application-oriented, correctness criterion that utilizes transaction semantics. We treat transactions as programs whose semantics can be analyzed at design time. The effect of each transaction is specified using pre- and postconditions, and any schedule that preserves these assertions is correct. Such schedules need not be serializable. We use transaction semantics in three distinct concurrency control models.
- Transactions are decomposed into steps and a new lock mode is introduced to control step interleaving in such a way that assertions are preserved.
- Using only conventional lock modes we develop a theory of non-two-phase locking that preserves assertions.
- We use the semantics of transactions together with the semantics of database operations to enhance concurrency in two-phase locked (serializable) schedules.
We are in the process of developing a facility for testing the effectiveness of these ideas. A load generator has been built and the Ingres database system is being modified to support the new concurrency controls.