并发控制

并发控制


并发造型带来的数据不一致性

    1. 丢失修改(lost update)

      两个事务T1T2T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失

    2. 不可重复读(non-repeatable read)

      事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果

    3. 读“脏”数据(dirty read)

事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某些原因被撤销

这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确数据

并发控制的主要技术有

    • 封锁(locking)
    • 时间戳(timestamp)
    • 乐观控制(optimistic scheduler)
    • 多版本并发控制(multi-version concurrency control)

 

封锁


 基本的封锁类型有两种:排他锁(X锁)和共享锁(S锁)

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

2、共享锁:若事务T对数据对象A加上S锁,则只允许T读取A,不能修改A,其他事物只能对A加S锁,不能加X锁,直至T释放A上的S锁为止

 


封锁协议


  • 一级封锁协议

事务T在修改数据R之前先对其加X锁,直到事务结束才释放

    • 可防止丢失修改并保证事务T是可恢复的
  • 二级封锁协议

    一级封锁协议基础上增加事务T在读取数据R之前先对其加S锁,读完后即可释放S锁

    • 防止丢失修改,还可以进一步防止读“脏”数据
  • 三级封锁协议

              在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直至事务结束才释放

    • 在一级封锁协议的基础上增加事务TT,在读取数据RR之前必须先对其加SS锁,直到事务结束才释放
    • 防止丢失修改,还可以进一步防止读“脏”数据、不可重复读

 

 

posted @ 2022-11-17 18:24  粉头老爷爷  阅读(81)  评论(0)    收藏  举报