事务通过向封锁管理程序的系统组成部分发出请求而对记录加锁。这时其他事务就不能读取和修改订票数,直到甲事务修改完成并将数据写回到数据库,并解除对此数据的封锁之后其他事务才能使用这些数据。加锁是实现并发控制的一个非常重要的技术。表7—1锁的相容矩阵在表7-1的加锁类型相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,最上面一行表示另一个事务T2对同一数据对象发出的加锁请求。......
2023-11-24
数据库中的数据是可以共享的资源,因此会有很多用户同时使用数据库中的数据,也就是说,在多用户系统中,可能同时运行着多个事务,而事务的运行需要时间,并且事务中的操作需要一定的数据。当系统中同时有多个事务运行时,特别是当这些事务使用同一段数据时,彼此之间就有可能产生相互干扰的情况。
事务是并发控制的基本单位,保证事务的ACⅠD特性是事务处理的重要任务,而事务的ACⅠD特性会因多个事务对数据的并发操作而遭到破坏。为保证事务之间的隔离性和一致性,数据库管理系统应该对并发操作进行正确的调度。
下面介绍并发事务之间可能相互干扰的情况。
假设有两个飞机订票点A和B,如果A、B两个订票点恰巧同时办理同一架航班的飞机订票业务。其操作过程及顺序如下:
①A订票点(事务A)读出航班目前的机票余额数,假设为16张。
②B订票点(事务B)读出航班目前的机票余额数,也为16张。
③A订票点订出6张机票,修改机票余额为16-6=10,并将10写回到数据库中。
④B订票点订出5张机票,修改机票余额为16-5=11,并将11写回到数据库中。
由此可见,这两个事务不能反映出飞机实际票数,而且B事务还覆盖了A事务对数据库的修改,使数据库中的数据不可信。这种情况就称为数据的不一致,这种不一致是由并发操作引起的。在并发操作情况下,会产生数据的不一致,是因为系统对A、B两个事务的操作序列的调度是随机的。这种情况在现实当中是不允许发生的,因此,数据库管理系统必须想办法避免出现这种情况,这就是数据库管理系统在并发控制中要解决的问题。
并发操作所带来的数据不一致情况大致可以概括为四种,即丢失修改、不可重复读、读“脏”数据和产生“幽灵”数据,下面分别介绍这四种情况。
1.丢失数据修改
丢失数据修改是指两个事务T1和T2读入同一数据并进行修改,T2提交的结果破坏了提交的结果,导致T1的修改被T2覆盖掉了。上述飞机订票系统就属于这种情况。丢失修改的情况如图7-5所示。
(www.chuimin.cn)
图7—5 丢失数据修改
2.读“脏”数据
读“脏”数据是指一个事务读了某个失败事务运行过程中的数据。即事务T1修改了某一数据,并将修改结果写回到磁盘,然后事务T2读取了同一数据(是T1修改后的结果),但后来由于某种原因撤销了它所做的操作,这样被T1修改过的数据又恢复为原来的值,那么T2读到的值就与数据库中实际的数据值不一致了。这种情况就称为T2读的数据为T1的“脏”数据,或不正确的数据。读“脏”数据的情况如图7-6所示。
图7—6 读“脏”数据
3.不可重复读
不可重复读是指事务T1读取数据后,事务T2执行了更新操作,修改了T1读取的数据,T1操作完数据后,又重新读取了同样的数据,但这次读数据后,当T1再对这些数据进行相同操作时,所得的结果与前一次不一样。不可重复读的情况如图7-7所示。
图7—7 不可重复读
4.产生“幽灵”数据
产生“幽灵”数据实际属于不可重复读的范畴。它是指当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中的部分记录,或者在其中添加了部分记录,那么当T1再次按相同条件读取数据时,发现其中莫名其妙地少了(删除)或多了(插入)一些记录。这样的数据对T1来说就是“幽灵”数据或称“幻影”数据。
产生这四种数据不一致现象的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方法来调度并发操作,使一个事务的执行不受其他事务的干扰,避免造成数据的不一致情况。
有关数据库技术与应用教程的文章
事务通过向封锁管理程序的系统组成部分发出请求而对记录加锁。这时其他事务就不能读取和修改订票数,直到甲事务修改完成并将数据写回到数据库,并解除对此数据的封锁之后其他事务才能使用这些数据。加锁是实现并发控制的一个非常重要的技术。表7—1锁的相容矩阵在表7-1的加锁类型相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,最上面一行表示另一个事务T2对同一数据对象发出的加锁请求。......
2023-11-24
多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,称这种调度为可串行化的调度。目前的数据库管理系统普遍采用封锁方法来实现并发操作的可串行性,从而保证调度的正确性。两段锁协议是保证并发调度的可串行性的封锁协议。图7—12并发事务的不同调度......
2023-11-24
前面讨论的并发控制算法都是悲观算法。反之,夭折该事务,并重新启动它。图9.7乐观事务的执行阶段可以设计一个基于封锁的乐观并发控制算法。不过原始乐观建议是基于时标序的。论文提出,事务冲突并不很频繁时,乐观算法的性能优于封锁算法的性能。乐观算法的一个主要缺点是存储开销较大。为了能够验证,乐观机制必须存储其他已终止事务的读集和写集。然而,减少了并发度,因为这仅让一个事务运行。......
2023-10-28
从1.1.1节的介绍可以看到,在数据库管理系统出现之前,人们对数据的操作是直接针对数据文件编写应用程序实现的,这种模式会产生很多问题。对于1.1.1小节中列举的学生基本信息管理和学生选课管理两个子系统,如果使用数据库技术来管理,其实现方式如图1-4所示。保证数据的安全是通过数据库管理系统的安全控制机制实现的,保证数据的可靠是通过数据库管理系统的备份和恢复机制实现的。......
2023-11-24
有多种并发控制算法的分类方式。按照同步原语可以将并发控制算法分成两类:基于互斥存取共享数据的算法和将事务排序按规则执行的算法。图9.10并发控制算法的分类●在主本封锁中,将每个封锁单元的某个副本指定为主本,在访问该单元时主本必须封锁。这些算法可以分成基本TO、多版本TO和保守TO等。实际上,在某些基于封锁的算法中也使用时标,因为这样可以改进效率和并发性,我们称为混合算法。......
2023-10-28
如果要使用缺省参数创建一个学籍管理数据库StuData,可以使用如下命令:Create Database StuData如果希望为数据库或事务日志指定一个或者多个特定文件,增加一个On Primary子句,列出一个或者多个文件,并可为分配这个文件的空间指定一个可选值,其命令形式如下:Create Database StuDataOn Primary,;如果为了提高性能和可恢复性,则可以使用Log On子句来指定数据库的SQL Server事务日志将存储在一个与数据库对象不同的设备上,示例如下:Create Database StuDataOn Primary,Log On;GO......
2023-11-24
关键字Modify File用以表示按后面的文件说明,在指定的数据库中修改相应数据库文件。下面的语句可在学籍管理数据库增加一个新数据库文件,同时要修改原数据库文件StuFile l的最大文件尺寸为2000 MB。Alter Database StuDataAdd FileModify File又如,如果要删除学籍管理数据库文件StuFile2,则可使用如下命令:Alter Database StuDataRemove File StuFile2......
2023-11-24
SQL的数据查询语句中包括SELECT,FROM,WHERE,GROUP BY和ORDER BY子句。SELECT语句具有数据查询、统计、分组和排序的功能,其语句表达能力非常强大。查询操作需要的数据源指基本表组,表间用“,”分割。当SELECT子句后的目标列中有统计函数,如果查询语句中有分组子句,则统计为分组统计,否则为对整个结果集统计。交查询操作,操作结果为取<查询1>和<查询2>共有的元组。......
2023-11-24
相关推荐