- Alan D. Fekete, University of Sydney, alan.fekete@sydney.edu.au
数据库管理系统添加价值的方式包括事务抽象,应用程序编码器可以将多个数据访问组合在一起,这些数据访问共同执行一个有意义的现实世界活动。该平台将提供“ACID”特性(原子性、一致性、隔离性和持久性),因此整个事务像单个事件一样发生。提供这些保证的机制包括崩溃恢复和回滚(通常基于日志条目)和并发控制(通常涉及锁)。
为了捕获并发控制的基本目标,我们考虑系统的执行是否为“可串行化”,这意味着存在另一种执行,其中事务之间根本没有相互交流,并且最终数据的最终状态和每个事务中观察到的值都相同。在可串行化执行中,即使平台没有显式强制任何完整性约束,只要每个程序单独运行时都能保持该完整性,结果仍然正确。理想情况下,平台的每个执行都将是可串行化的。
并发控制的早期机制是两阶段锁定(2PL),基于数据项的更新方法,采用排他锁(用于数据修改)或共享锁(用于读取),并将其保留到事务结束。相反,许多最近的平台采用多版本机制,多个访问可以看到数据项的较旧版本,而不是最新版本。这可以带来更好的性能,因为甚至在并发写操作完成之前就可以进行读取。
从数据库技术的早期开始,平台就在 API 中提供了命令,应用程序可以调用该命令将事务隔离级别设置为可串行化、可重复读或读已提交。Gray 等人[1]引入了读已提交隔离级别,作为锁定的变体,仅在读取访问期间持有共享锁,而不是像传统的可串行化两阶段锁定那样持有到事务结束。这样做可能会提高性能,但是数据完整性可能会面临风险。多版本并发控制也存在变体,其隔离性比可串行化弱,尽管给定级别允许的系统行为与传统的基于锁定的方式并不完全相同。

