数据库的并发控制和封锁协议分析

                                                                                  
数据库的并发控制和封锁协议分析

[摘 要] 数据库可以提供给多个用户共享数据信息资源,所以就必须对并发的事务进行控制,这种并发控制必须引入一些封锁协议以保证数据的完整性。本文针对数据库并发操作中可能产生的数据不一致性问题进行分析,并给出解决的方法。

[关键词] 数据库 并发控制 一致性 封锁 封锁协议

一、引言

目前主流的关系数据库通常都允许多个用户同时使用和共享,所以也都具有并发控制的机制,也就是控制数据库,防止多用户并发使用数据库时造成数据错误和程序运行错误,以保证数据的完整性。

二、事务与并发控制的概念

当多用户并发存取数据时,就会产生多个事务同时存取同一数据的情况,从而引起严重的数据错误和程序运行错误。那么我们来看,什么是事务及并发控制呢?

事务就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的很小的工作单位。例如,在SQL语言中,定义事务的语句有三条:

BEGINTRANSACTION;

COMMIT;

ROLLBACK;

其中的BEGINTRANSACTION 是事务开始的标记,而以COMMIT或者ROLLBACK结束,COMMIT 用于提交事务的所有操作,ROLLBACK 则在事务运行过程中一旦发生了某种故障而使事务无法继续执行的时候,系统就将事务中对数据库的所有刚刚完成的操作全部撤消,滚动回到事务开始时的状态。为了充分利用系统资源,使数据库的共享资源得以有效利用,必须可以使多个事务并行的执行,而数据库对并行执行的事务进行的控制就是并发控制。

三、事务进行并发操作可能引起的数据不一致问题

由于种种原因,都可能引起数据库的数据遭到破坏,比如多个事务在并行运行的时候,不同的事务的操作产生了交叉执行,或者,事务在运行过程中被强行停或者中断。因此,事务在进行并发操作的时候很可能引起数据的不一致,下面我们看一个具体的例子。例如飞机票的联网销售系统,如果有以下的操作序列:

1.甲售票处(设置为T1 事务)读出某班次的机票剩余数A ,

设A=20

2.乙售票处(设置为T2 事务)读出同班次的机票剩余数A ,也是20

3.甲售票处(T1 事务)卖出一张机票,修改剩余数减一(A← A-1),把A=19 写回数据库中

4.乙售票处(T2 事务)也卖出一张机票,修改剩余数减一(A← A-1),把A=19 写回数据库中从这些操作中,我们看到,乙售票处的修改数据覆盖了甲售票处修改的数据,实际发生了两张机票的销售,而数据库中却错误的存入19,少了一张。参看图1 的情况。这种情况是并发操作引起数据不一致的第一种情况,叫做丢失修改(Lost Update),第二种是不可重复读(Non-Repeatable Read),

第三种是读“脏”数据(DirtyRead)。

下边看第二种情况,不可重复读是指事务T1 读数据以后,T2执行更新操作,就使T1无法再现原先读取的数据,得到与上一次不同的结果,例如图2 。

读“脏”数据是指T1 修改某数据并将其写回数据库,T2 读取同一数据后,T1 由于某种原因被撤消,T1 执行回滚,恢复到原始的数据,T2 就读取到了过程中的一个作废的数据,这个数据就是一种垃圾数据,称之为“脏”数据,也是不正确的。参看图3 。

从以上例子我们看到,数据不一致性的主要原因就是并发操作没有对事务进行一定的隔离,所以,正确的调度应该使一个用户的事务不受到其他事务的干扰,从而避免数据的不一致性。

四、在并发控制中采用封锁协议解决数据的不一致性并发控制的主要方法是封锁(Locking)。就是要用正确的方式调度并发操作,使一个用户的事务在执行过程中不受其他事务的干扰,从而避免造成数据的不一致性。封锁是使事务对它要操作的数据有一定的控制能力。封锁通常具有3 个环节:第一个环节是申请加锁,即事务在操作前要对它将使用的数据提出加锁申请; 第二个环节是获得锁,即当条件成熟时,系统允许事务对数据进行加锁,从而事务获得数据的控制

权;第三个环节是释放锁,即完成操作后事务放弃数据的控制权。

基本的封锁类型有以下两种:

1.排它锁(Exclusive Locks,简称X锁)

排它锁也称为独占锁或写锁。一旦事务T 对数据对象A 加上排它锁(X 锁),则只允许T 读取和修改A ,其他任何事务既不能读取和修改A ,也不能再对A 加任何类型的锁,直到T释放A 上的锁为止。

2.共享锁(Share Locks,简称S 锁)

共享锁又称读锁。如果事务T 对数据对象A 加上共享锁(S锁),其他事务只能再对A加S 锁,不能加X 锁,直到事务T 释放A 上的S 锁为止。在对数据进行加锁时,另外需要约定并执行一些规则和协议,其中包括何时申请锁,保持锁的时间以及何时释放等,这些规则就称为封锁协议(Locking Protocol),其总共分为以下三级:

(1)一级封锁协议。一级封锁协议是事务T 在修改数据之前必须先对其加X 锁,直到事务结束才释放。

(2)二级封锁协议。二级封锁协议是事务T 对要修改数据必须先加X 锁,直到事务结束才释放X 锁;对要读取的数据必须先加S 锁,读完后即可释放S 锁。

(3)三级封锁协议。三级封锁协议是事务T 在读取数据之前必须先对其加S 锁,在要修改数据之前必须先对其加X 锁,直到事务结束后才释放所有锁。

执行了封锁协议之后,就可以克服数据库操作中的数据不一致所引起的问题。

从图4 的情况我们看到事务T1 在执行过程中独自占用并加X锁,直到处理完之后再释放锁,T2 虽然也需要使用,但是在封锁协议的约束之下,T2 所要求的X 锁就被拒绝,因此必须处于等待状态,直到T1 释放之后,T2 才获得使用的权利,这样就不会发生使用冲突,避免了数据的丢失。这里我们看到,此处实际上是执行了一级封锁协议。

通过图5 ,能够清楚的看到,由于施行了封锁协议,使事务T1 使用了共享锁占用A,B 两块数据,这样T2 需要加上的X 锁就无法实现,(如果是S 锁,虽然可以加上,但也不能够随便修改数据,只是读取一下数据。)当T1 释放锁之后,T2 就可以得到并使用锁了,这样读取的数据B 仍然还是100,不影响A+B 的结果,这就是可重复读取。因此我们看到,其实这里用的就是三级封锁协议参看图6,事务T1 在对数据C 修改之前,先加上了X锁,修改后写回数据库,这时T2 请求在C上添加S 锁,因为T1
加了X 锁,T2只好等待,当T1 因为某种原因撤销了修改的数据后,C 就恢复了原来的数据100,等T1 释放X 锁后T2 获得C 上的S锁, 读到的还是C = 1 0 0,因此避免了读出“脏”数据。这里使用的其实就是二级封锁协议。。

通过以上内容,数据库由于采用一定的封锁协议避免了数据的不一致性问题,这使得数据库的并发控制有效而且有益,从而使得多项事务可以并行的操作数据库的共享资源了。这就是数据库合理的进行调度,避免了冲突,避免了数据的不一致。

参考文献:

[1]苗雪兰:数据库系统原理及应用教程[M].北京:机械工业出版社,2004

[2](美)Mary Pyefinch著:希望图书创作室译[M].SQL数据库开发从入门到精[M].北京希望电子出版社,2000[3]丁宝康 董健全:数据库使用教程[M].北京:清华大学出版社,2001

时间: 12-10

数据库的并发控制和封锁协议分析的相关文章

数据库三级封锁协议简述

我们首先来简单了解一下事务:事务首先是定义一组操作集,这组操作集要么都做,要么都不做. 比如A向B转账100元,操作集为 (1)读取A账户金额 (2)A账户金额  -  100元 (3)读取B账户金额 (4)B账户金额 + 100元 如果这组操作集,没有都执行完,只执行了几条语句,就会导致数据库数据不一致性,钱不翼而飞了. 三级封锁协议,就是在高并发环境下,有多个事务同时执行,保证数据的一致性.一,二,三级协议分别解决了,丢失修改,读脏数据,和不可重复读问题. 1.首先我们来介绍一下基本封锁类型

POP3协议分析邮箱自动激活用户

使用POP3协议分析邮箱自动激活用户 2015-03-28 Lover雪儿 前几天,我们实现了,用户PHP模拟邮件激活注册用户, 地址:http://www.cnblogs.com/lihaiyan/p/4359927.html ,但是有的时候,往往是需要注册用户自己手动的向服务器的邮箱进行发送一封邮件,然后服务器通过分析邮箱的发件人,从而匹配自动的激活用户账号. 上class.pop3.php 邮件发送人分析php源代码: 1 <?php 2 3 //用户往[email protected]邮

蓝牙协议分析(7)_BLE连接有关的技术分析

转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connection)是一个相当消耗资源(power和带宽)的过程.特别是当没有数据传输的时候,所消耗的资源完全被浪费了.因而,对很多蓝牙设备来说(特别是功耗敏感的设备),希望在无数可传的时候,能够断开连接.但是,由于跳频(hopping)以及物理通道(Physical Channel)划分的缘故,经典蓝牙连接

BT协议分析(1)&mdash;1.0协议

简述 BT下载是采用P2P的下载方式,下载的大致形式采用如下图所示,处于图示中心的称为Tracker服务器,其余称为Peer.   缺点 1.资源的安全性 2.资源的实效性(没有上传者则BT也将失效) 3.版权 协议分析 对BT协议(1.0)的分析主要包含4个部分: 1.种子文件的分析 2.同Tracker服务器的通讯(采用HTTP协议) 3.同其他peer(配合/协同者)的通讯(采用TCP协议) 4.总结 分析前的了解 在这些分析之前,需要先了解两点BT协议采用的基础: 1.BT协议中采用的单

物联网MQTT协议分析和开源Mosquitto部署验证

在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定并力推,其具有开放.简单.轻量级以及易于实现的特点使得其即便在资源受限的环境中也能得到很好的使用,比如运行在资源紧缺型的嵌入式系统中或网络带宽非常昂贵的环境中,除此之外,它也被广泛用于遥感勘测.智能家居.能源监测和医疗应用程序等各个领域,是物联网的重要组成部分,将来可能会成为物联网的事实标准. 本篇文章将帮助

协议分析 - DHCP协议解码详解

协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议. DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器.DHCP为客户端分配地址的方法有三种:手工配置.自动配置.动态配置. DHCP最重要的功能就是动态分配

linux 网络协议分析---3

本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 网络接口层包括用于协作IP数据在已有网络介质上传输的协议.实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能.相反,它定义像 地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口. 第二层 网间层 网

网络协议分析

1. 网络模型 2. 协议分析 2.1协议架构 2. 2 以太网协议格式 2. 3 IP协议格式 2. 4 TCP协议格式 2. 5 UDP协议格式

http-live-streaming 协议分析

http-live-streaming 协议分析:不受限制的多媒体数据流的传输.协议支持媒体数据加密与流切换(例如不同码率).媒体数据创建后立即传输,播放接近实时.媒体数据通常采用HTTP进行传输.播放列表由一个有序的媒体URI列表和信息标签组成,每个媒体URI指向一个媒体文件,这个媒体文件是单个连续媒体流上的一个片断.为了播放媒体流,客户端首先获取播放列表文件,然后获取并播放播放列表中的每个媒体流文件.客户端依据下文定义方式重复加载播放列表文件以获取追加片断.播放列表必须是扩展的M3U播放列表