做疏通什么网站推广好,重庆专业网站推广平台,怎么建立织梦网站,外贸是做什么的工作内容是什么一、引言
1、封锁技术是目前大多数商用DBMS采用的并发控制技术#xff0c;封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化
2、基于锁的并发控制的基本思想是#xff1a;
当一个事务对需要访问的数据库对象#xff0c;例如关系、元组等进行操作…一、引言
1、封锁技术是目前大多数商用DBMS采用的并发控制技术封锁技术通过在数据库对象上维护锁来实现并发事务非串行调度的冲突可串行化
2、基于锁的并发控制的基本思想是
当一个事务对需要访问的数据库对象例如关系、元组等进行操作之前要先向系统发出封锁请求获得所访问的数据库对象上的锁即对数据库对象进行加锁来限制并发的其他事务对这些数据对象的访问
3、DBMS采用的封锁模式均包括共享锁和排它锁同时采用两阶段封锁协议来约定锁的使用保证并发事务非串行调度的可串行化
二、封锁模式
由于事务对数据库对象的操作分为读操作和写操作因此常用的封锁模式中也有两种类型的锁一种用于读称作共享锁简称S锁又称作读锁
一种用于写称作排他锁简称X锁又称作写锁
1、共享锁
1若事务T想读取数据库对象A而不更新A,事务T必须申请获得A上的共享锁
2若申请成功则事务T在数据库对象A上加共享锁事务T可以读A但不能写A
3事务T和其他事务只能再对A加共享锁而不能加排他锁
这就保证了其他事务可以读A但在事务T释放A上的共享锁之前不能对A作任何更新
2、排他锁
1若事务T不仅要读取数据库对象A还要更新A ,事务T必须申请获得A上的排他锁
2若申请成功则事务T在数据库对象A上加排他锁事务T不仅可以读A还能写A
3事务T和其他事务不能对A加任何类型的锁 这就保证了在事务T释放A上的排他锁之前其它事务不能再读取和更新A
3、对于任何数据库对象A其上只能有一个排他锁或者没有排他锁而有多个共享锁也就是有多个事务可以同时读取A但只能有一个事务读取并更新A
4、为了使并发执行的事务提早执行或提前完成提高事务的执行效率。如果一个事务T想要读数据库对象A并可能更新A应首先申请A上的一个共享锁获得A上的共享锁后友好地对待其他事务允许其他事务申请并获得A上的共享锁同时读取A而仅当事务T准备为A写入新值时再申请将加在A上的共享锁升级为排他锁。而事务T的锁升级请求是否会得到满足则要看此时数据库对象A上的加锁情况
5、在同一数据库对象上已经被某事务加锁的情况下并发控制机制能否同意其他事务的封锁申请的策略可用一个锁相容矩阵来描述 在锁相容矩阵中最左边一列表示在某数据库对象上事务T1已经获得的锁S为共享锁X为排他锁—表示没有加锁最上边一行表示另一事务T2对该数据库对象发出的封锁请求T2的封锁请求能否被满足用矩阵中的Y和N来表示Y即YES表示T2申请的锁与T1已拥有的锁相容封锁请求可以满足N即NO表示事务T2申请的锁与T1已持有的锁冲突T2的封锁请求被拒绝
6、现在我们知道如何使用锁了对于我们上一节所提到的这个非可串行化的调度如果我们在调度中当事务对需要访问的数据库对象进行操作之前要先向系统发出封锁申请在读之前申请读锁并获得锁在写之前升级为写锁并获得锁写完释放锁。 这里用Slock(A)表示在某数据对象A上加上共享锁Xlock(A)表示在A上加上排他锁Unlock(A)表示释放A上的锁也称解锁。可以发现虽然我们正确地进行了封锁操作但并没有解决该并发事务的非可串行化问题
三、封锁协议
1、在利用封锁技术对并发事务进行操作时需要对事务何时申请要访问的数据库对象上的锁何时释放所获得的锁等约定一些规则即封锁协议
2、约定不同的规则就形成了各种不同的封锁协议
3、两阶段封锁协议是最常用的一种实现可串行化的封锁协议
四、两阶段封锁协议
两阶段封锁协议对事务调度中的封锁操作的顺序进行限制要求在每个事务中所有的加锁操作优先于所有解锁操作即每个事务在对数据库对象进行封锁时必须分获得锁和释放锁两个阶段
1、第一阶段是获得锁阶段也称扩展阶段
在这个阶段事务要申请得到完成事务操作所需要的所有锁只能申请锁不能释放锁
2、第二阶段是释放锁阶段也称收缩阶段
在这个阶段事务释放所获得的所有锁不能再申请任何锁
若事务遵循两阶段封锁协议其封锁操作序列应类似这种形式
先是对需要访问的各数据对象加锁然后再开始释放锁实际应用中为了便于阶段的划分通常将释放锁阶段放在事务结束时的COMMIT或ROLLBACK操作中完成
因此许多DBMS的并发控制机制采用严格的两阶段封锁协议来实现并发事务的可串行化
3、其协议规则包含如下具体内容
事务T在读一个数据库对象前必须获得该数据库对象上的读锁如果没有其他事务拥有这个数据库对象上的写锁那么事务T的封锁请求得到满足操作继续执行事务T在更新一个数据库对象前必须获得该数据库对象上的写锁如果没有其他事务拥有这个数据库对象上的读锁或写锁那么事务T的封锁请求得到满足操作继续执行。若事务T已具有该数据库对象上的读锁则必须将读锁升级为写锁也必须获得该数据库对象上的写锁若事务B的封锁请求与事务A已获得的锁不相容时事务B将处于等待状态直到事务A释放其所拥有的锁为止事务所获得的锁将一直保持到事务结束才释放。即直到事务提交或终止且提交或终止日志记录已被刷新到磁盘后事务才允许释放锁
这就是严格封锁协议的要求 3、前面我们对这个非串行化调度进行的封锁操作并没有解决并发事务的非可串行化问题。若采用严格的两阶段封锁协议事务T1在读取数据库对象X之前申请并获得读锁写数据库对象之前升级读锁为写锁写后并没有释放锁然后事务T2对数据库对象X申请的读锁与事务T1已持有的数据库对象X上的写锁不相容封锁请求得不到满足事务T2处于等待状态事务T1继续完成对数据库对象Y的读写事务执行完成提交后才释放数据库对象X和Y上的锁事务T2才能够开始执行事务T2在事务T1释放锁之前被拒绝执行推迟了将导致非可串行化的操作的执行调度的执行实际上相当于事务T1先于T2的一个串行调度实现了并发事务的可串行化
4、对于我们在上一节讨论的并发事务带来的数据不一致问题比如“脏读”问题事务T1在完成之前发生了故障需撤销回滚事务T2读取了夭折事务T1对X的中间更新结果是一个脏数据 若采用严格两阶段封锁协议进行并发控制在事务T2因对数据库对象X申请的读锁与事务T1已持有的数据库对象上的写锁不相容而处于等待状态时事务T1在完成之前发生了故障则事务T1终止并撤销回滚将X的值恢复为事务开始时的值事务T1结束才释放所持有的数据对象X上的锁事务T2才能够开始执行此时事务T2读取的是夭折事务T1 ROLLBACK后的值即事务T1没执行前的值是数据库处于一致性状态时的值不再是脏数据 五、小结
1、封锁技术通过共享锁间的相容性以及排他锁的排他性使得并发调度中的非冲突操作并发执行冲突操作串行执行实现了冲突可串行化
2、采用封锁技术进行并发控制的DBMS在具体实现时使用的锁类型除了共享锁和排他锁两种基本锁外为了事务能够高效地并发执行并减少死锁的发生还会使用一些其他类型的锁形成相应的封锁策略及对应的锁相容矩阵以及采用更能便于应用执行的封锁协议而不一定是可串行化的严格的两阶段封锁协议