赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
在数据库中,并发控制,即允许多个事务同时对数据库进行访问
并发控制:
读写和写写类型:可能导致的问题如丢失更新,读到脏数据,不可重复的读等问题
可串行化是并发控制的一个标准,简单来说就是有n个事物,会有n!个执行结果,我们只要保证最终执行结果时n!中的一个,就说事物的并发控制是正确的
封锁法是决大多数并发控制的解决方法,锁是针对数据对象的,这里以关系为单位,实际上还可以对某个元组上锁等,引入三种封锁机制
封锁阶段(2PL):
在一个事物中,所有加锁请求都在解锁前面完成,即如下图,我们称这个限定为2PL
在一个事物中,对数据对象进行操作前,我们会寻求先上锁,这是一种好的表现,称为“well-formed"
如果有那么一个计划是满足2PL和well-formed的,我们称这个S计划是可串行化的,即可并操作。
对一个更新请求,我们先给上U锁,当真正需要到更新操作时,U锁升级为X锁。这样子可以缩短执行时间,提高并发程度。在U锁的基础上还可以上S锁,即真正修改更新前,我们还可以读操作。
三种锁的并发程度和负担
死锁:时间顺序上可以理解为T1对R1上X锁,T2对R2上X锁,这时候T2访问到R1,等待T1对R1解锁,处于等待中,但是此时T1也访问到R2,需要等待R2的解锁才可以进行R1的解锁,那么这两个事物就陷入了死循环。再通俗点的一个笑话:hr问你什么时死锁,你回答hr:“你给我offer我就告诉你什么时死锁"。
活锁,也叫饿死现象:尽管不存在死循环,但是等待时间过长
活锁是简单的,我们需要关注的是死锁,从预防和解决两个角度解决死锁问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。