数据库是一个共享资源,可以供多个用户使用。允许多个用户同时使用的数据库系统称为多用户数据库系统。
当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确数据,破坏事务的一致性和数据库的一致性。
并发控制概述
为了保证事务ACID(原子性,一致性,隔离性,持久性),DBMS需要对并发操作进行正确调度。这些就是数据库管理系统中并发控制机制的责任。
看一个例子,说明并发操作带来的数据的不一致性问题。
1:甲售票点读出某航班的机票余额A,设A=16;
2:乙售票点读出同一航班的机票余额A,也为16;
3:甲售票点卖出一张机票,修改余额A为15,把A写回数据库;
4:乙售标点也卖出一张机票,修改余额为15,把A写回数据库;
仔细分析并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据。
1:丢失修改
两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
2:不可重复读
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
3:读“脏”数据
读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据就是“脏”数据,即不正确的数据。
产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式高度并发操作, 使一个用户事务的执行不爱其他事务的干扰,从而避免造成数据的不一致性。
另一方面,对数据库的应用有时允许某些不一致性,例如有些统计工作涉及数据量很大,读到一些“脏”数据对统计精度没有什么影响, 这时可以降低对一致性的要求以减少系统开销。
并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法,商用的DBMS一般都采用封锁方法。
封锁
封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求, 对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
确切的控制由封锁的类型决定。基本的封锁类型有两种:排它锁和共享锁。
排它锁又称写锁.若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
共享锁又称读锁.若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
两段锁协议
为了保证并发高度的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化换。目前DBMS普遍采用两段锁协议 的方法实现并发调度的可串行性,从而保证调度的正确性。
在运用封锁方法时,对数据对象加锁时需要约定一些规则,例如何时申请封锁、持锁时间、何时释放封锁等。我们称这些规则为封锁协议。
所谓两段锁协议是指所有的事务必须分两个阶段对数据项加锁和解锁。
1:在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
2:在释放一个封锁之后 ,事务不再申请和获得任何其他封锁。
封锁的粒度
封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。
封锁粒度与系统的并发度和并发控制的开销密切相关。直观地看,封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销越小;反之,封锁的粒度越小,并发度较高,但系统开销也就越大。
如果在一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁。
显式封锁是应事务的要求直接加到数据对象上的封锁;隐式封锁是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加了锁。
多粒度封锁方法中,显式封锁和隐式封锁的效果是一样的,因此系统检查封锁冲突时不仅要检查显示封锁还要检查隐式封锁。
一般地,对某个数据对象加锁,系统要检查该数据对象上有无显式封锁与之冲突;还要检查其所有上级结点,看本事务的显式封锁是否与该数据对象上的隐式封锁(即由于上级结点已加的封锁造成的)冲突;
还要检查其所有下级结点,看上面的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。显然,这样的检查方法效率很低。
为此人们引进了一种新型锁,称为意向锁
意向锁
意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。
1:IS锁(意向共享锁)
如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。
例如,事务T1要对R1中某个元组加S锁,则要首先对关系R1和数据库加IS锁。
2:IX锁(意向排它锁)
如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。
例如,事务T1要对R1中某个元组加X锁,则要首先对关系R1和数据库IX锁。
3:SIX锁(共享意向排它锁)
如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,SIX=S+IX。
例如对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别无组(所以要对该表加IX锁)。
具有意向锁的多粒度封锁方法中任意事务T 要对一个数据对象加锁,必须先对它的上层结点加意向锁。申请封锁时应该按自上而下的次序进行; 释放封锁时则应该按自下而上的次序进行。
例如,事务T1要对关系 R1加S锁,则要首先对数据库加IS锁。检查数据库和R1是否已加了不相容的锁(X或IX)。
不再需要搜索和检查R1中的元组是否加了不相容的锁(X锁)。
具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销,它已经在实际的数据库管理系统产品中得到广泛应用。
分享到:
相关推荐
数据库并发控制是数据库管理系统中的关键组成部分,特别是在多用户系统中,确保数据的一致性和完整性至关重要。并发控制的主要目的是防止多个事务在访问共享资源时产生不正确的数据状态,从而避免诸如丢失更新、脏读...
分布式数据库并发控制是数据库系统中的一个重要领域,尤其在多处理器或多节点环境中,多个事务可能同时对数据库进行操作,这就会引入一系列并发问题。并发执行在单处理器和多处理器环境下都有可能发生,不同的是,在...
数据库并发控制PPT学习教案 数据库并发控制是数据库管理系统(DBMS)中一个非常重要的概念。它是指在多个事务同时访问数据库时,如何确保事务之间的一致性和隔离性,防止数据不一致和丢失。 在数据库并发控制中,...
### 数据库并发控制的基本方法 #### 一、并发控制概览 在数据库系统中,**并发控制**是一项关键的技术,用于确保多个事务能够同时访问数据而不引起数据不一致的问题。并发控制的目标是使得多个事务的并发执行看...
数据库并发控制及SQL 包含内容包括:数据库并发控制及SQL Server的并发控制机制 事务及并发控制的基本概念 封锁机制 SQL Server的并发控制机制 等等
数据库并发控制是确保多个用户或应用程序能够同时访问数据库时,数据的完整性和一致性得到保障的重要机制。此外,它还旨在优化数据库的性能,避免因并发操作导致的数据竞争、死锁等问题。本文将详细介绍数据库并发...
数据库并发控制是确保数据一致性、防止数据竞争和死锁的重要手段。通过合理设置事务隔离级别、使用锁定机制、实施乐观或悲观并发控制策略、预防和解决死锁以及性能优化,可以有效地处理数据库的并发问题。同时,遵循...
希望读者能够通过本文,对数据库并发控制有更深入的理解,并在自己的项目中应用这些策略和技术。 本文详细介绍了数据库并发控制的不同策略和技术,包括锁机制、MVCC、乐观与悲观并发控制,以及事务隔离级别的选择和...
本文将详细介绍数据库并发控制的概念、重要性、常见策略以及实现方法。 数据库并发控制是确保多用户环境下数据一致性和完整性的重要机制。通过本文的探讨,我们了解到了并发控制的重要性、常见策略以及实现方法。...
该课件具体系统的讲述了数据库并发控制,很实用。
### 数据库并发控制及其在SQL Server 2000中的应用 #### 一、并发控制概述 在现代数据库管理系统(DBMS)中,**并发控制**是一项关键的技术,尤其是在多用户环境中,它确保了多个事务能够同时访问数据库而不会导致...
根据提供的文件信息,我们可以深入探讨数据库并发控制的关键概念和技术,特别是封锁和并发调度的重要性及其应用场景。 ### 数据库并发控制 数据库并发控制的核心在于确保多用户环境下的数据完整性及一致性。在多...
### 数据库并发控制技术解析 #### 一、引言 在多用户环境下,数据库系统面临着如何有效管理和控制多个用户或应用程序同时访问同一份数据的问题。并发控制是数据库管理系统(DBMS)的重要组成部分,它确保了即使在高...
数据库并发控制是数据库管理系统(DBMS)中至关重要的一个部分,它确保了在多事务环境中,数据的正确性和一致性。SQL Server作为一款广泛使用的数据库管理系统,同样具备强大的并发控制机制来处理多用户同时访问...
实验12的主题聚焦于数据库并发控制,这是一个在数据库系统中至关重要的概念,特别是在多用户同时访问数据库时确保数据一致性与正确性的关键环节。本实验旨在让学生深入理解并发控制的原理和常见问题,如脏读。 ...
作者首先介绍了分布式数据库并发控制的重要性和并发问题的类型,包括丢失修改、不可重复读和读脏数据。接着,详细分析了锁和时间戳这两种并发控制方法的原理和优缺点。最后,详细阐述了在VS2008开发环境和SQL Server...
数据库并发控制是数据库管理系统(DBMS)中至关重要的一个方面,它确保在多用户环境中,事务的正确执行和数据的一致性。SQL Server作为一款广泛使用的数据库系统,提供了高效的并发控制机制来解决并发操作可能引发的...