并发控制协议

dbmsdatabasedata storage更新于 2026/1/18 16:07:17

为了确保多个事务能够并发访问和编辑数据,而不会导致数据不一致或损害数据完整性,数据库系统必须包含并发控制协议。数据一致性和系统性能旨在通过并发控制方法实现平衡。

本文将介绍多种并发控制协议及其工作原理。

基于锁的并发控制

在数据库系统中,基于锁的并发控制是一种常见的策略。为了防止其他事务同时访问相同的数据,此协议要求事务请求对数据对象的锁。锁分为共享锁和排他锁。

但是,只有一个事务可以拥有排他锁,这使得该事务能够编辑数据项。共享锁允许多个事务读取同一数据项。通过确保事务之间不冲突,该协议避免了数据不一致。

基于锁的并发控制技术有两种类型 -

  • 两阶段锁 (2PL) - 在该协议中,事务在进行任何修改之前会获取所有必要的锁,并且仅在事务完成后才释放这些锁。通过这样做,可以确保当前事务与任何其他事务不冲突。

  • 严格两阶段锁定 (S2PL) − 与 2PL 类似,S2PL 要求事务在提交或中止之前保留所有锁定。

悲观协议和乐观协议可用于进一步划分基于锁的并发控制算法。悲观协议利用锁来阻止争议,因为它们预期争议会发生。积极协议允许事务在不锁定数据项的情况下继续执行,因为它们认为冲突并不常见。

基于时间戳的并发控制

每个进入系统的事务都会通过基于时间戳的并发控制协议获得一个独特的时间戳。该协议利用这些时间戳来选择允许运行的事务,并根据这些时间戳确定事务的处理顺序。

基于时间戳的并发控制技术有两种:

  • 时间戳排序 (TO) - 使用此协议时,系统会根据时间戳顺序处理事务。如果时间戳较低的事务尝试访问已被时间戳较高的事务锁定的数据项,则必须等待。

  • Thomas 写入规则 (TWR) - TWR 是 TO 协议的优化。当且仅当交易的时间戳高于写入数据项的任何交易的最新时间戳时,它才允许执行交易。

多版本并发控制

多版本并发控制 (MVCC) 协议会为每条数据创建多个副本,以便多个事务可以并发访问。每个事务都会看到与该事务时间戳匹配的数据项副本。

Web 应用程序和其他需要高并发性的系统采用 MVCC 协议。MVCC 协议有两种变体 -

  • 快照隔离 (SI) - 此协议中的每个事务都会读取事务启动时数据库的副本。即使另一个事务更新了原始数据项,当前事务仍可继续读取,从而保持数据一致性。

  • 可序列化快照隔离 (SSI) − 作为 SI 的补充,SSI 在保证可序列化性的同时,仍支持高并发性。事务可以在 SSI 协议下并发运行,每个事务都会看到与其时间戳一致的数据库快照。

结论

为了保证数据一致性并避免数据不一致,并发控制技术至关重要。由于基于锁的协议简单高效,因此经常被使用,而高并发性的系统则使用基于时间戳和 MVCC 的协议。

数据库系统的需求、工作负载和性能目标决定了应该使用哪种并发控制协议。数据库管理员和开发人员必须理解各种并发控制协议及其工作原理,才能构建高性能、可靠的数据库系统。


相关文章