数据库管理-并发控制

标签: 并发 事务
340人阅读 评论(0) 收藏 举报
分类:

一、并发操作中存在的问题

事务并发执行会产生以下几个问题:
1. 丢失修改:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失。
2. 读“脏数据”:事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因撤销,这时T1修改过的数据恢复原值,T2得到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。
3. 不能重复读:事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果
二、封锁技术

所谓封锁是在一段时间内禁止某些用户对数据对象做某些操作,以避免产生数据的不一致性问题。只有当一个事务在一个数据项持有某种锁时,才允许改事务访问这个数据。
封锁一般有排它锁定(X锁)和共享锁(S锁)两种类型。如果事务T获得了数据项Q上的排它锁,既可以读写Q又可写Q,其他事务在Q上既不能加X锁也不能加S锁。如果事务T获得了数据项Q上的共享锁,则T可读Q但不能写Q,其他事务在Q上可以加S锁,但不能加X锁。每个事务要根据自己将对数据项Q进行的操作申请适当的锁,该请求发送给并发控制管理器只有在并发管理器授予所需要的锁之后,事务才能继续其操作。

三、可串行化

假设若干相互独立的事务在单独执行时结果正确,则将他们按照一定顺序构成事务集后,这些事务顺序执行(称为串行操作)的结果也不正确。当这些事务并发执行时,采用分时的方法同时处理多个事务,成为并行操作,该操作与串行操作的结果不一定相同。通常把确定事务运行顺学的具体步骤成为调度,如果一个并行调度的结果等价与某一串行操作调度执行的结果,则将这种调度成为可串行化调度

四、死锁

  1. 多个事务并发执行,每个事务都申请其他事务已经封锁了的对象,这些申请无法满足,从而使得这些事务永远不能结束
  2. 数据库系统有若干个长时间运行的事务在执行并行的操作,当查询分析处理一种非常复杂的连接查询时,由于不能控制处理的顺序,有可能发生死锁。

    解决方法:

  3. 预防法,常用的有一次封锁法和顺序封锁发。一次封锁法是要求每一个事务必须将所有要使用的数据全部加锁,否则就不能继续执行。顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按照这个顺序封锁。这两种方法的缺陷在于事务的封锁请求随事务的执行而动态变化,所以很难确定枷锁对象及顺序。

  4. 诊断解除法,常用的有超时法和等待图法。超时法的是如果一个事务等待时间超过了规定的期限,就认为发生了死锁。等待图法是用一个有向图动态地反应所有事务的等待情况,系统周期性地检测等待图,如果发现图中存在回路,则表示系统中出现了死锁。

五、封锁协议
在多个事务并发执行的系统中,主要采取封锁协议来处理

  1. 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,一级封锁协议可防止丢失修改,并保证事务T是可恢复的,但不能保证可重复读和不读“脏”数据
  2. 二级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前先对其加S锁,读完后即可释放S锁。二级封锁协议可防止丢失修改,还可防止读“脏”数据,但不能保证可重复读
  3. 三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前先对其加S锁,直到事务结束才释放。三级封锁协议可防止丢失修改,还可防止读“脏”数据与保证可重复读
  4. 两段锁协议:所有事务必须分两个阶段对数据项加锁和解锁。其中,扩展阶段是在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁;收缩阶段是在释放一个锁之后,事务不能再申请和获得任何其他封锁。若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的,但不能保证不发生死锁。

    六、隔离级别
    当事务接受不一致的数据级别时称为事务的隔离级别。如果事务的隔离级别比较低,会增加事务的并发问题,有小弟设置事务的隔离级别可以降低并发问题的发生,在SQL SERVER中,可使用下述语句设置事务的格力级别
    SET TRANSACTION ISOLATION LEVEL
    {
    READ COMMITTED|READ UNCOMMITTED
    REPEATABLE READ|SERIALIZABLE
    }

    1.READ COMMITTED:指定在读取数据时加共享锁以避免读“脏”数据,但数据可在事务结束前修改,从而产生不可重复读取或幻想读取改数据,改选项是SQL SERVER的默认值
    2.READ UNCOMMITTED:执行脏读或0级隔行锁定,这表示不发出共享锁,也不接受排他锁。该选项的作用在于事务内所有的表上设置UNLOCK相同这是4个隔离级别中限制最小的级别
    3.REPEATABLE READ:锁定查询中使用的所有数据,以防止其他用户更新数据,但其他用户可以将心得数据插入数据集,从而在当前事务的后继读取中出现新的数据,产生幻想读。因为并发地域默认隔离级别,所以必要时才使用该选项
    4.SERIALIZABLE:在数据集上设置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。

查看评论

数据库并发控制技术

数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。但是如果一个...
  • yanglilibaobao
  • yanglilibaobao
  • 2007-06-28 13:04:00
  • 29495

Oracle9i的数据库管理, Oracle9i数据库对象的管理,Oracle9i数据库的安全性,Oracle9i数据库的完整性和并发控制等

  • 2010年02月02日 14:14
  • 8.87MB
  • 下载

并发控制的方法

一、volatile 使用volatile标识变量,将迫使所有线程均读写主内存中的对应变量,从而使得volatile变量在多线程间可见。 二、同步关键字synchronized 它是最常用的同步...
  • w302974215
  • w302974215
  • 2015-10-19 14:56:13
  • 679

分布式数据库的并发控制方法

一,分布式数据库并发控制方法分类 1.基于特定副本的方法: 主副本的方法:每个数据对象设置唯一的一个主副本,一般设置在经常发生封锁的场地,主副本所在的场地为该数据对象的主场地,不同数据对象拥有不同...
  • huangxy10
  • huangxy10
  • 2012-05-22 15:05:03
  • 2862

数据库并发控制知识点总结

刚看到一篇很不错的数据库并发控制知识点总结,包括一部分可能会出现在笔试面试中的题目,适合对基础概念理解不透彻的我,就转载过来了。  原文地址:http://blog.csdn.net/xiangmi...
  • sunsfan
  • sunsfan
  • 2016-08-28 13:13:40
  • 1798

分布式系统阅读笔记(十六)-----事务和并发控制

介绍 在分布式系统中,事务的运用和共享资源的并发控制是非常常见的。简单的说,事务就是一些原子的操作的集合。原子操作的意思就是要么操作成功要么操作失败,没有其他的选择。并发控制是出现在高并发场景的时候...
  • Androidlushangderen
  • Androidlushangderen
  • 2015-01-16 15:09:39
  • 2865

第11章 并发控制(数据库系统概论)

第11章 并发控制(数据库系统概论)
  • Last_Impression
  • Last_Impression
  • 2010-07-09 09:56:00
  • 3016

数据库并发控制原理详解

数据库并发控制原理 数据库属于公共资源库,当多个事务并发处理数据库数据时,如果控制不当则会造成数据的不一致性,出现数据混乱。对此,数据库引入了锁机制来解决这一问题。为了弄清这个问题,首先要明白为什么多...
  • song19890528
  • song19890528
  • 2013-11-28 20:59:47
  • 3855

SQL数据库(9)——并发控制

多用户数据库系统的存在允许多个用户同时使用,在同一时刻并发运行的事务数可达数百个不同的多事务执行方式事务串行执行每个时刻只有一个事务运行,其他事务必须等到这个事务结束后方能运行 交叉并发方式并行事务并...
  • longxinghaofeng
  • longxinghaofeng
  • 2017-01-01 14:16:58
  • 463

数据库并发控制的基本方法

  • 2009年12月21日 23:25
  • 372KB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 257万+
    积分: 3万+
    排名: 133
    博客专栏
    最新评论
    文章存档