赞
踩
1.第十章 数据库并发控制
- 并发
- 事务是并发控制的基本单位
- 并发控制保证事务的隔离性和一致性
- 并发带来的问题丢失修改 不可重复读 读脏数据
- 丢失修改 T2的提交破坏了T1达成的提交 比如飞机抢票
- 不可重复读 T1想要两次读取某个数据 但是第二次来的时候被其它事务更新了
- 读脏数据 被撤回的事务修改后的数据被拿去用了
- 封锁
- 并发控制的方法
- 排他锁 写锁 X锁 可写可读 不允许其它事务再加锁
- 共享锁 读锁 S锁 只能读不能写 其他事务只能加S锁不能加X锁
- 封锁协议
- 一级封锁协议 事务T在修改R之前必须要先上X锁 丢失修改
- 二级封锁协议 事务T在读取R之前必须要先上S锁 读取完之后释放 读脏数据
- 三级封锁协议 事务T在修改R之前必须要先上S锁 事务结束后释放 不可重复读
- 活锁 死锁
- 活锁
- T1封锁R T2也想封锁,此时进入等待。T3也请求封锁,那么当T1解锁后,先服务T3,如果后面再来其它的 则T2一直处于等待状态
- 解决方案 先来先服务
- 死锁
- T1锁R1 T2锁R2 此时T1想锁R2需要等T2 如果T2也想锁R1 则也需要等T1 则二者永久停止
- 解决方案
- 预防
- 一次封锁法
事务要将所有要用到的数据全部加锁
- 顺序封锁法
- 诊断
- 超时法
超过时间就判定为死锁
- 可能会误判
- 如果时间设置过长也会浪费时间
- 等待图法
生成等待图 如果等待图中有回路则判定为死锁
- 意向共享锁 意向排他锁 共享意向排他锁 IS IX SIX
- 对X加IS锁 则对他的后裔加S锁
- 对X加IX锁 则对他的后裔加X锁
- 对一个对象加SIX锁 则对这个对象加S锁再加IX锁
- 其它并发控制的方法
- 封锁
- 时间戳
- 乐观控制法
- 多版本并发控制
- 可串行性 当并发的结果与某一次按串行执行这些事务的结果相同 九满足可串行性
- 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。 正确 充分不必要条件
- 一个事务对某数据加.X锁后,其它的事务只能对该数据加S锁。错误
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。