并发控制

《数据库系统概念》19-并发控制

别来无恙 提交于 2019-12-22 14:03:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当多个事务在数据库中并发地执行时,数据的一致性可能无法再维持。系统有必要控制各事务之间的相互作用,这是通过被称为并发控制的机制来实现的。最常用的机制是各种封锁协议、时间戳排序机制、有效性检查技术与多版本机制。 一、封锁协议是一组规则,这些规则阐明了事务何时对数据库中的数据项进行加锁和解锁。 两阶段封锁协议仅在一个事务未曾释放任何数据项上的锁时才允许该事务封锁新的数据项。该协议保证可串行性,但不能避免死锁。在没有关于数据项访问方式信息的情况下,两阶段封锁协议对于保证可串行性即使必要的又是充分的。 严格两阶段封锁协议要求事务持有的所有排他锁必须在事务结束时方可释放,其目的是保证结果调度的可恢复性和无级联性;强两阶段封锁协议要求事务持有的所有锁必须在事务结束时方可释放。 基于图的封锁协议对访问数据项的顺序加以限制,从而不需要使用两阶段封锁还能保证可串行性,而且又能够保证不会产生死锁。 许多种封锁协议都不能防止死锁。一种可以防止死锁的方法是使用数据项的一种顺序,并且按与该顺序一致的次序申请加锁;另一种防止死锁的方法是使用抢占与事务回滚。为控制抢占,我们为每个事务赋予一个唯一时间戳。这些时间戳用于决定事务是等待还是回滚。如果一个事务回滚,它在重启时保持原有时间戳。 如果没有预防死锁的机制

数据库的锁机制

て烟熏妆下的殇ゞ 提交于 2019-11-28 14:24:40
在 MySQL事务隔离 中已经提到了事务隔离级别和脏读、不可重复读、幻读产生的原因。为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。 并发控制 在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制( Concurrency control )是确保及时纠正由并发操作导致的错误的一种机制。 数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。下面举例说明并发操作带来的数据不一致性问题: 现有两处火车票售票点,同时读取某一趟列车车票数据库中车票余额为 X。两处售票点同时卖出一张车票,同时修改余额为 X -1写回数据库,这样就造成了实际卖出两张火车票而数据库中的记录却只少了一张。 产生这种情况的原因是因为两个事务读入同一数据并同时修改,其中一个事务提交的结果破坏了另一个事务提交的结果,导致其数据的修改被丢失,破坏了事务的隔离性。并发控制要解决的就是这类问题。 封锁 、 时间戳 、 乐观并发控制 (乐观锁)和 悲观并发控制 (悲观锁)是并发控制主要采用的技术手段。 锁 当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。锁就是其中的一种机制。 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制