数据库并发

数据库并发定义:

一个处理机处理一个事务,系统允许多个处理机处理多个事务,称为并发

并发引起的影响:

1.修改丢失:事务1和事务2同时操作某条数据,比如机场共有机票16张,事务1卖出一张后修改为15,同时事务2也卖出1张,修改为15,最后数据库中票量为15,实际只剩14个座位

2.不可重复读:事务1第一次读取数据a,假如100,然后事务2修改a为200,事务1第二次读则数据为200

3.脏数据:事务2将a从100改为200,然后事务1读取a,事务2由于修改错误回滚,那么事务1读的数据就是脏数据

处理并发影响的技术--加锁:


排他锁(写锁):事务1对数据a加锁,只有事务1能对a读写,其他的事务不能对a加锁,直到事务1释放锁,称为x锁

共享锁(写锁):s锁,事务1对数据啊加锁,只能对数据进行读操作,其他事务只能对a加s锁,不能加x锁

加锁解决并发的问题:

1.事务1对数据加x锁,等事务释放锁后事务2才能对数据加锁

2.事务1对数据加s锁,直到事务1释放锁后,事务2才能对数据加x锁

3.事务2对数据加x锁,等事务2释放锁后事务1才能加s锁

加锁引起的问题:

活锁:事务1对a加锁,然后事务2请求对a加锁,这时事务3也请求对a加锁,等1释放锁,系统会先处理事务3的请求,这时事务4请求对a加锁,循环这样,事务2请求会一直处理不了

解决:采取先来先处理的方式

死锁:事务1对a加锁,事务2对b加锁,事务1处理过程中请求对b加锁,处理完等待事务2释放锁,而事务2处理过程中对a请求加锁,处理完等待事务1释放,两者都无法释放。

解决:破坏死锁或者允许死锁,定期检查。1.一次性封锁所有数据2.顺序封锁,所有事务按这个顺序封锁

死锁诊断方法有:超时法(可能导致死锁发生无法处理),等待图发(比较负责,需要对系统深入了解)

可串行性:

按某一次序串行的执行事务时的结果一致

事务1:读B;A=B+1;写A

事务2:读A;B=A+1;写B

两段锁

事务分两个阶段对数据项加锁

1.执行前申请加锁

2.执行后不能再申请和获取任何锁

封锁的粒度

封锁对象的大小。

多粒度封锁-多粒度数--数据结构树

意向锁:向数据项的上下节点加锁

 

posted @ 2014-04-24 00:06  cgymy  阅读(574)  评论(0编辑  收藏  举报