并发控制协议
为了确保许多事务可以同时访问和编辑数据,而不会引发数据不一致或损害数据完整性,数据库系统必须包括并发控制协议。通过并发控制方法来平衡数据一致性和系统性能的关系。
本文将介绍各种并发控制协议及其工作原理。
基于锁的并发控制
在数据库系统中,基于锁的并发控制是一种常见的策略。为了防止其他事务同时访问相同的数据,该协议要求事务对数据对象请求锁。锁分为共享锁和排他锁。
然而,只有一个事务可以拥有排他锁,这允许该事务编辑数据项。共享锁允许多个事务读取相同的数据项。通过确保事务彼此不冲突,该协议避免了不一致的数据。
基于锁的并发控制技术有两种变体 –
- 两阶段锁定(2PL) - 在此协议中,事务在进行任何修改之前获取所有必要的锁,只有在事务完成后才释放这些锁。通过这样做,确保当前事务和其他任何事务不冲突。
- 严格两阶段锁定(S2PL) - 类似于2PL,S2PL要求事务在提交或中止之前保持所有锁定状态
悲观和乐观协议可以进一步区分基于锁的并发控制算法。悲观协议利用锁来阻止冲突,因为它们预期冲突会发生。乐观协议允许事务在不锁定数据项的情况下继续进行,因为它们认为冲突是罕见的。
基于时间戳的并发控制
通过基于时间戳的并发控制协议,进入系统的每个事务都被赋予一个独特的时间戳。该协议利用这些时间戳来选择应允许运行的事务,并使用它们来确定事务处理的顺序。
基于时间戳的并发控制技术有两种不同的类型−
- 时间戳排序(TO) − 使用此协议时,系统按照时间戳顺序处理事务。如果事务尝试访问已被具有较高时间戳的事务锁定的数据项,则具有较低时间戳的事务必须等待。
-
Thomas’写规则(TWR) − TWR是TO协议的优化。仅当事务的时间戳高于写入数据项的任何事务的最新时间戳时,才允许执行事务。
多版本并发控制
多版本并发控制(MVCC)协议使每个数据块的多个副本可以被各种事务并发访问。每个事务只能看到与其时间戳匹配的数据块的副本。
需要高并发性能的Web应用程序和其他系统使用MVCC协议。MVCC协议有两个变体−
- 快照隔离(SI) − 在该协议中,每个事务读取数据库的一个副本,该副本与事务启动时的数据库相一致。即使另一个事务更新了数据项,当前事务仍然可以继续读取原始数据项,保持数据一致性。
- 可序列化快照隔离(SSI) - 作为对SI的补充,SSI在保证并发性的同时也保证了可序列化。在SSI协议下,事务可以并发运行,并且每个事务都能看到与其时间戳一致的数据库快照。
结论
为了保证数据一致性并避免数据不一致性,必须使用并发控制技术。由于它们简单高效,基于锁的协议经常被使用,而要求高并发性的系统则使用基于时间戳和MVCC的协议。
数据库系统的要求、工作负载和性能目标决定了应使用哪种并发控制协议。数据库管理员和开发人员必须理解各种并发控制协议以及它们的工作原理,以构建高性能可靠的数据库系统。