事务环境中的数据库挑战:事务锁、两阶段提交与死锁
立即解锁
发布时间: 2025-08-27 00:05:03 阅读量: 2 订阅数: 8 


事务管理与分布式数据库的挑战和解决方案
# 事务环境中的数据库挑战:事务锁、两阶段提交与死锁
## 1. 引言
数据库访问是在短期和长期事务的框架内进行的。每个事务由一系列对数据库的操作组成,事务执行所花费的时间和执行的操作数量实际上没有预先设定的限制。
当客户端应用程序发送登录请求时,会话开始。数据库的操作是在事务隐含的操作以及构成这些操作的原子单元的视角下完成的。数据库的一致性要求要么所有原子单元都被执行,要么一个都不执行。事务的结束通过请求提交或中止来表示。
与数据库信息元素(IE)相关的锁的使用遵循一组简单的规则。读锁防止读写冲突,写锁防止写写冲突。持有读锁或写锁的事务可以保证该信息元素不会被其他事务修改(写入)。持有写锁的事务还可以保证在一系列事件中,该对象不会被其他事务读取,从而避免并发冲突。
当登录到数据库时,数据库管理系统(DBMS)通常会开始一个会话。它通过创建数据库的私有副本来启动一个事务。实际上并没有复制实际数据,但这个副本对用户(人员、终端或程序)来说,包含了所有被授权访问的信息元素(就像它们在事务开始时的状态一样)。
在执行期间,访问和计算在事务的生命周期内是有效的。执行结束后,唯一可见的更改是应用程序在事务执行期间所做的更新、添加或删除。从基本意义上讲,读写事务允许在本地副本的上下文中检查和修改数据库,直到相关操作以提交、中止或注销结束。
提交操作会通知DBMS通过合并事务期间所做的所有更改来更新数据库。如果更改成功合并并且事务提交成功,DBMS会为会话提供一个更新后的数据库副本。中止事务会丢弃由于该事务可能对数据库所做的任何更改而产生的可能已更新的数据库副本。注销消息会中止事务并结束会话,而不更新数据库。在新事务开始时,会使用一个包含在中止事务进行期间其他提交会话所做的所有更改的全新数据库副本。
## 2. 简单事务下数据库管理系统的内务处理
数据库事务更新的最简单情况可以在集中式结构的示例中找到,其中每个信息元素只有一个副本,由一个DBMS运行。虽然这种情况在现实生活应用中越来越少见,但它仍然提供了一个易于理解的范例。
由于事务及其伴随的数据库内容副本会一直存在,直到所有相关操作成功提交或中止,DBMS必须执行内务处理任务。例如,在每个事务开始时,DBMS会获取数据库主根页面的副本,作为副本的基础。然后,它会构建和管理这个副本,以影子树的形式实现,直到被要求提交或中止事务。
当事务提交时,会话的副本树会分两步与共享数据库合并。首先,DBMS确保所有包含新对象和修改对象的影子页面都已写回到数据库。然后,它调用资源管理器写入一个新的系统根页面,更新状态信息。
为了中止事务,DBMS会获取一个新的根页面副本并重新开始。如果数据库没有发生任何更改,则不需要撤销其中存储的任何内容。否则,内务处理任务包括恢复过程。DBMS必须确保:
- 影子树中呈现的数据库状态在事务运行期间是可用且一致的;
- 事务可见的唯一更改是它自己所做的更改。
此外,尽管给定的应用程序可以看到整个数据库,但DBMS通常只读取应用程序实际引用所需的页面。当DBMS将事务提交到数据库时,只有包含新对象或修改对象的页面才会写回到存储中,从而减少数据传输开销。
从第一个商业DBMS问世到20世纪80年代初,这种范例大约适用了15年。但随着事务复杂性的增加,这种简单的范例不再能反映当前网络范围内事务处理的需求。因此,需要找到一种不同的、更复杂的范例。
将长事务应用程序拆分为可以独立延迟或调度的部分,可以实现处理长事务的过程。预计这将提高系统性能,每个事务块基本上会重复上述范例。然而,在设计将业务事务拆分为多个但相互关联的步骤的应用程序时,存在一些先决条件。这种方法的关键词包括:
- 序列化;
- 锁定;
- 提交;
- 冲突解决。
序列化的过程是所有商用DBMS都会执行的基本操作。实际上,在单个数据库层面,许多需求已经得到了解决。挑战在于数据库的多样性和不断扩大的全局性。
从提交机制的角度来看,序列化原则以及序列化访问的原则是,为了进行写操作,一个获取数据库控制权的进程会延迟其他进程的写操作。这一原则适用于事务已读取的信息元素。这种锁定的效果是:
- 使给定事务中包含的信息元素对其他更新操作不可访问;
- 在第一个事务的执行期间保持这种不可访问性。
全局和本地级别事务(及其执行)的双重性带来的一个主要困难在于它们的协调。在对等环境中,由于缺乏中央管理权限,这一点尤其明显。如果存在这样的中央权限,那将是一种集中式数据库方法,会带来其固有的所有限制。
在许多长事务的实现环境中,另一个关键问题是,传统的可串行化概念作为正确性标准可能过于严格。这就引出了复杂事务执行中的并发问题。
## 3. 原子性与处理复杂事务所需的概念
与简单事务不同,复杂的全局事务包含许多子事务。与此相关的一项至关重要且具有挑战性的任务是协调这些子事务的执行,因为为了保持数据一致性,必须提交或中止所有子事务。
系统解决方案倾向于通过使
0
0
复制全文
相关推荐










