天道酬勤,恒者能胜。追求卓越,成功就会在不经意间追上你。

数据库管理之数据库的并发控制(三)

上一篇 / 下一篇  2013-01-11 09:43:18 / 精华(1) / 置顶(1) / 个人分类:Oracle数据库

我们家有一个圆形的水缸,我妈叫我测一下周长,去做个盖子。我想,周长公式是2πr,那就要测r,就要找到圆心,于是我找了两根撑衣杆,交叉之后在缸上面找圆心。我妈看了半天:你在干啥子?”“测半径算周长啊”“。。。你不能直接拿根毛线绕一圈吗?。。。我觉得我对不起我小学毕业证书!



1、 数据库并发控制定义:在多用户共享系统中,许多事务可能同时对同一数据进行并发(在单处理机上利用分时方法实行多个事务同时做)操作,数据库利用并发控制子系统协调并发事务的执行,保证数据库的完整性同时避免用户得到不正确的数据。

2、 数据库的并发操作带来的问题

a)        丢失更新问题

b)        脏数据问题

                        i.             脏数据的定义:在数据库技术中,把未提交的随后被撤销的数据称为脏数据

c)        不可重复读问题

3、 封锁技术

a)        锁的定义:是一个与数据项相关的变量,对可能应用于该数据项上的操作而言,锁描述了该数据项的状态。通常每个数据项都有一个锁。

b)        锁的作用:是使并发事务对数据库中数据项的访问能够同步。

c)        封锁技术的分类:

                        i.             排他型封锁(X锁,写锁):如果事务T对某个数据R实现了X锁,那么在T对数据R解除封锁之前,不允许其他事务T再对该数据加任何类型的锁。

1.        申请X锁操作“XFIND R

2.        解除X锁操作“XRELEASE R

                      ii.             共享型封锁(S锁,读锁):如果事务T对某个数据R实现了S锁,仍允许其他事务再对该数据加S锁,但在对该数据的所有S锁都解除之前不允许任何事务对该数据加X

1.        申请S锁操作“SFIND R

2.        升级和写操作“UPDX R

3.        解除S锁操作“SRELEASE R

d)        封锁的粒度:封锁对象的大小称为封锁的粒度(Granularity)。封锁的粒度越大,并发度越小,系统开销越小;封锁的粒度越小,并发度越大,系统开销越大

e)        封锁协议:运行封锁机制时,需要约定一些跪着,这就是封锁协议

                        i.             一级封锁协议

1.        定义:事务在修改数据之前,必须先对该数据加X锁,直到事务结束时才释放,但只读数据的事务可以不加锁

2.        优点:防止“丢失修改”

3.        缺点:不加锁的事务,可能读脏数据也可能不可重复读

                      ii.             二级封锁协议

1.        定义:事务在修改数据之前,必须先对该数据加X锁,直到事务结束时才释放,但其他事务在读数据之前必须先加S锁,读完数据后即可释放S

2.        优点:防止“丢失修改”和“读脏数据”

3.        缺点:对加S锁的事务,可能不可重复读

                     iii.             三级封锁协议

1.        定义:事务在修改数据之前,必须先对该数据加X锁,直到事务结束时才释放,但其他事务在读数据之前必须先加S锁,直到事务结束后才释放S

2.        优点:防止“丢失修改”、“读脏数据”、“不可重复读”

3.        缺点:无

f)         封锁产生的问题

                        i.             活锁:指两个或两个以上的事务再执行过程中,T1事务封锁了数据R,事务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放了R上的封锁后,系统优先批准了T3事务进行封锁,而T2继续等待,这就是活锁。

                      ii.             饿锁:指两个或两个以上的事务再执行过程中,有一个事务一致无法得到要封锁的数据R

                     iii.             死锁:指两个或两个以上的事务再执行过程中,因争夺资源而造成一种相互等待的现象,若无外力作用,它们将无法推进下去,此时称为死锁

4、 数据库并发操作的调度

a)        事务的调度的定义:事务的执行次序称为调度

b)        串行调度:多个事务依次执行

c)        并发调度:利用分时的方法,同时处理多个事务

d)        并发调度的可串行化:每个事务中,语句的先后顺序在各种调度中始终保持一致,在这个前提下,如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发调度称为可串行化的调度,否则是不可串行化的调度。

5、 SQL对并发处理的支持

a)        定义:SQL2对事务的存取模式和隔离级别,做了具体规定,并提供语句让用户使用,以控制事务的并发执行

b)        事务的存取模式

                        i.             只读型(Read Only):事务对数据库的操作只能是读操作

Set transaction read only

                      ii.             读写型(Read Write):事务对数据库的操作可以是读操作也可以是写操作

Set transaction read write

c)        事务的隔离级别

                        i.             可串行化(Serializable):允许事务与其他事务并发执行,但系统必须保证并发调度是可串行化,不致发生错误(高)

Set transaction isolation level serializable

                      ii.             可重复读(Repeattable read):只允许事务读已提交的数据,并且在两次读同一数据时不允许其他事务修改此数据(中)

Set transaction isolation level repeatable read

                     iii.             读提交数据(Read commited):允许事务读已提交的数据,但不要求可重复读(低)

Set transaction isolation level read committed

                     iv.             可以读未提交数据(Read Uncommitted):允许事务读已提交或未提交的数据(最低)

Set transaction isolation level read uncommitted

                                                                                                                                 零测试


TAG: 零测试 事务 并发控制 脏数据

 

评分:0

我来说两句

Open Toolbar