浅析基于封锁的事务并发控制

时间:2022-10-05 02:38:40

浅析基于封锁的事务并发控制

摘 要 本文叙述了关系型数据库管理系统中对事务的并发控制不当产生的数据库不一致现象,阐述了解决这些不一致问题的方法,并详细介绍了封锁技术和封锁协议。

关键词 事务 并发控制 一致 封锁

1 引言

在多用户数据库系统中,如果每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行。这样就不能充分利用系统资源,如I/O、CPU等 ,不能发挥数据库共享资源的特点。所以为了提高吞吐量,系统中常常是允许多个用户同时使用的数据库系统,也就是多个事务并行运行,串行和并行的比较。

当多个事务同时存取同一数据时,如果不加以控制,就会破坏数据库的一致性。所以数据库管理系统(Database Management System,DBMS)必须提供并发控制机制,使得并发的事务在冲突的时候被串行化执行。这种调度称为可串行化调度。其中基于封锁的并发控制机制是一种被广泛应用于商业DBMS中的并发控制机制。

2 问题的提出

事务是用户定义的一组数据库操作序列的集合,这个集合中包含了一条或多条SQL语句。这些语句要么全部都执行,要么一条都不执行。

2.1 事务的特性

事务具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。

2.1.1原子性。事务是数据库的逻辑单位,事务中包含的所有操作要么全部被执行,要么都不被执行

2.1.2一致性。事务的执行结果必须使数据库从一个一致性状态变到另一个一致性状态。数据库中若只包含成功事务执行的结果,则能使数据库处于一致性状态。

2.1.3隔离性。一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

2.1.4持续性指。一旦事务成功提交,其对数据库中数据的改变是永久的。接下来的其他操作或故障不应该对其执行结果有任何影响。

2.2 事务的并发引起的数据不一致

保证事务ACID特性是事务处理的任务,当多个事务并行运行时,不同事务的操作交叉并发执行可能会破坏事务的ACID特性,而导致数据的不一致性。并发操作带来的数据不一致行包含三类:丢失修改、不可重复读和读“脏”数据。

2.2.1丢失修改。它是由于事务之间的写冲突造成的。两个事务T1和T2同时读入同一数据并修改,T21的提交破坏了T1的提交结果,导致T1的修改丢失。

2.2.2 不可重复读。不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。不可重复读包括三种情况:

2.2.2.1 T1读取某一数据后,T2对其做了修改,当T1再次读取该数据时,得到与前一次不同的值。

2.2.2.2 T1按一定的条件从数据库中读取了某些记录后,T2删除其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘的消失了。

2.2.2.3 T1按一定的条件从数据库中读取了某些记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。后两种情况也称幻影现象。

2.3读“脏”数据

读脏数据指事务T1修改某数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据中的数据不一致,则称T2读到的数据就为“脏”数据。

3 并发控制机制

分析造成以上各个错误的原因,是由于并发操作破坏了事务的条理性。所以应该用正确的方式规定并发操作,避免并发事务之间相互干扰造成的数据不一致性。并发控制的主要技术有封锁技术、时间戳技术等。下面将以封锁技术为例,阐述并发控制机制的实现方法。

3.1 封锁的定义

事务T在对某个数据对象,如数据库、表或记录等操作之前,首先向系统发出加锁请求以便获得对数据对象相应的控制,在事务T释放它所获得的锁之前,其他事务不能更新此数据对象。

3.2 锁的类型

下面介绍DBMS涉及的锁。

3.2.1排它锁(Exclusive Lock)。排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。

3.2.2共享锁(Shared Lock)。用于读操作,又称读锁,记做S锁。事务T对数据对象A加上s锁,则T可读A但不能写A,其他事务只能对A加s锁,而不能加x锁,直到T释放锁。两种锁的相容矩阵如图1所示。

图1 锁的相客矩阵

其中Y=YES,表示相容的请求 N=NO,-表示不相容的请求。

3.3 各级封锁协议及解决的问题

封锁协议指的是封锁规则,即何时开始封锁,封锁多长时间,何时释放等。对封锁方式规定不同的规则,就形成了不同的封锁协议。

3.3.1 一级封锁协议。事务T在修改数据对象前必须对其加X锁,直到事务结束才释放。利用一级封锁协议可以解决丢失修改问题。

3.3.2 二级封锁协议。在一级封锁协议的基础上,另外加上事务T在读取数据对象R前必须对其加S锁,读完后立即释放。除了可以解决丢失修改问题之外,还可以解决读“脏”数据问题。

3.3.3 三级封锁协议。对于二级封锁协议当中的读锁,直到事务T结束才释放。可以解决丢失修改、不可重复读和读“脏”数据三类问题。总结各级封锁协议以及解决的问题如图2所示。

图2 封锁协议及其解决的问题

4 结束语

并发控制机制是衡量某DBMS系统性能的指标之一。事务的并发控制的算法很多,这里仅仅介绍了基于锁的控制方法。因为它实现简单,协议可靠,被广泛使用到网络数据库管理系统中。

参考文献:

[1]萨师煊,王珊.数据库系统概论[M].北京:高等教务出版社,2000.

[2]卢成浪,徐湖鹏.基于封锁的事务并发控制概述[J].计算机光盘软件与应用,2010,(4).

[3]张永华,张芳,宋菁.一种基于内存数据库的并发控制协议研究[J].微计算机信息,2007,(36).

作者简介:

张丽君,女,(1981.01~),汉,辽宁丹东人,助教,硕士。主要研究方向:数据库理论及应用技术等。

梁云娟,女,(1979~),汉,河南新乡人,讲师,硕士。研究方向:数据挖掘、网络安全。

上一篇:Soho Time 下一篇:如何灵活驾驭动态课堂