数据库并发控制技术

Posted MirrorML

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库并发控制技术相关的知识,希望对你有一定的参考价值。

并发控制技术

并发控制的主要技术有封锁(locking)、时间戳(timestamp)、乐观控制法(optimistic sheduler)和多版本并发控制(multi-version concurrency control,MVCC)

并发可能造成的后果

  1. 不可重复读

    事务T1读取某一数据之后,事务T2对其进行了修改,当事务T1再次读该数据时,得到与前一次不同的值。

  2. 脏读

    事务读取了未提交的数据。

  3. 幻读(不可提交的一种)

    事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现多了一些记录。

  4. 丢失修改

    两个不同的事务同时获得了相同的数据,又都对这个数据进行了修改,那么先提交的事务的更新就会被后提交事务的更新覆盖掉,叫做丢失更新。

封锁

排它锁(X锁)

​ 排它锁又称写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁直到T释放A上的锁为止。

共享锁(S锁)

​ 共享锁又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事物只能再对A加S锁,而不能加X锁。

封锁协议

一级封锁协议

​ 一级封锁协议是指,事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。

二级封锁协议

​ 二级封锁协议是指,在一级封锁协议基础上增加事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议出防止了丢失修改,还可以进一步防止读“脏”数据。

三级封锁协议

​ 三级封锁协议是指,在一级封锁协议的基础上增加事务T在读数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议出防止了丢失修改和读“脏”数据外,还可以进一步防止了不可重复读。

两段锁协议

​ 是指所有的事务必须分两个阶段对数据项加锁和解锁。即事务分两个阶段,第一个阶段是获得封锁。事务可以获得任何数据项上的任何类型的锁,但是不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。

遵循两段锁协议一定是可串行化的‘;不遵循两段锁协议,可能是串行化的,也可能不是

采用两段锁协议可能产生死锁

事务的隔离级别

  1. READ UNCOMMITTED(读未提交):最低级别,任何情况都无法保证。
  2. READ COMMITTED(读已提交):可避免读脏数据。
  3. REPEATABLE READ(可重复读):可避免读脏数据,不可重复读。
  4. SERIALIZABLE(串行化):最高级别,可避免读脏数据,不可重复读,幻读。

以上是关于数据库并发控制技术的主要内容,如果未能解决你的问题,请参考以下文章

数据库并发控制技术

十一章:数据库恢复技术并发控制

并发控制

LINQ to SQL语句(13)之开放式并发控制和事务

解读年度数据库PostgreSQL:如何处理并发控制

数据库 chapter 11 并发控制