1. 假设两阶段锁定并不保证可串行性。
然后有一个组事务T0,T1……Tn−1,服从2pl和它产生的非序列化时间表。
一个非可序列化的时间表意味着一个周期在优先图,我们将显示,2pl 不能产生这种循环。
没有损失的通用性,假设以下循环存在于优先图: T0→T1→T2→……Tn−→1→T0。
让αi是Ti获得其最后一个锁(即Ti的锁点)的时间。
然后对所有事务,以便Ti →Tj,αi <αj。
然后我们有周期
α0 <α1 <α2 <……< <α0αn−1
因为α0 <α0是一个矛盾,没有这样的循环可以存在。
因此2pl无法产生非可序列化的时间表。
因为所有事物的属性,Ti→Tj,αi <αj,锁点排序的事务也是一个拓扑排序顺序图的优先级。
因此事物根据他们的锁点可以序列化。
2.a.锁定和解锁指令:
b执行这些事务可能导致死锁。
例如,考虑下面的部分计划:
现在的事务陷入死锁。
3. 严格的两阶段锁具有严格的2pl。
此外,它已经属性,对于两种相互冲突的交易,他们的提交订单是他们的可串行性秩序。
在一些系统中用户可能希望这种行为。
4. 证据就是Buckley和Silberschatz,并发控制在图协议通过使用边锁,Proc。
ACM SIGACT-SIGMOD的研讨会上数据库系统原理,1984。
5. 考虑下面的树型结构数据库图。
时间表可能在树协议但不低于2pl
6. 证据就是Kedem和Silberschatz,锁定协议:从独享共享锁,JACM卷。
30,4,1983。
7. 证据就是Kedem和Silberschatz,控制并发使用锁定协议,Proc。
年度IEEE研讨会的计算机基础科学,1979。
8. 证据就是Kedem和Silberschatz,控制并发使用锁定协议,Proc。
年度IEEE研讨会的计算机基础科学,1979。
9. 访问保护机制可以用于实现页面级锁。
考虑读第一,一个过程是允许读一页只有在它读-锁该页面。
这是通过使用mprotect实现最初关掉阅读所有页面的权限,因为这个过程。
当进程试图访问一个地址在一个页面上,保护违反发生。
处理程序关联保护违反然后请求一个页面上的读锁,锁后获得,它使用mprotect允许读访问页面的过程,最后允许过程继续。
写访问的处理是类似的。
10. 证据就是Korth,锁定原语在一个数据库系统,JACM卷。
30日,1983。
11. 它没有什么区别。
写协议是这样的,最近的写一项事务也是最大时间戳的那个。
12. 如果一个事务需要访问一个大的一组项目,多粒度锁需要更少的锁,而如果只有一个条目需要访问,单一的锁粒度系统允许这只有一个锁。
因为所有的所需的数据项锁和锁在一起的多个粒度方案,锁的开销很低,但并发也减少了。
13. 在并发性控制方案选择的16.3节(Ti)开始的时间戳的Ti给一个子集的日程允许通过选择验证(Ti)的时间戳。
使用Start(Ti)意味着,无论谁开始首先必须完成第一。
显然交易可以输入验证阶段在相同的顺序,他们开始执行,但这是过于限制。
既然选择验证(Ti)导致更少的非冲突性的事务重新启动,它提供更好的响应时间。
14.两相锁:用于简单的应用程序,一个单一的粒度是可以接受的。
如果有大的只读事务,多版本的协议将做得更好。
同样,如果死锁必须不惜一切代价加以避免,树协议将是可取的。
两相锁定与多个粒度锁:用于应用程序组合,一些应用程序访问单个记录和其他人访问整个关系或实质性的零部件。
2pl的瑕疵上面提到的同样适用于这一个。
这棵树协议:如果所有的应用程序可能会使用访问数据项在订单符合一个特定的偏序。
这个协议是免费的死锁,但事务将经常不得不锁不必要的节点来访问所需的节点。
时间戳排序:如果应用程序要求使用一个并发执行,相当于一个特定的序列排序(比如,到达的顺序),而不是任何串行订购。
但冲突是由回滚事务,而不是等待,和时间表是不可恢复的。
到让他们可恢复的,额外的开销和提高响应时间必须被容忍。
不合适的如果有长只读事务,因为他们会饿死,死锁缺席。
验证:如果两个并发执行事务冲突是低概率,这个协议可以用来方便地得到更好的并发性和良好的响应时间和低开销。
不适合高争用情况,许多浪费的工作被完成。
多版本的时间戳排序:使用时间戳排序是合适的,但如果是最理想的读请求永远等待。
共享时间戳排序协议其他的缺点的。
多版本两阶段锁定:该协议允许只读事务总是提交没有等待。
更新事务遵循2 pl,从而允许可恢复时间表与冲突解决等而不是回滚。
但问题的死锁回来,虽然只读事务不能参与他们。
保持多个版本添加空间和时间开销虽然,因此普通2pl可能在冲突情况下比低。
16. 一个事务等待A .磁盘I / O和b .获取锁的。
事务通常等待磁盘读取,而不是磁盘写,作为磁盘写操作是由缓冲机制在异步时尚和事务更新只有内存复制的磁盘块。
提出的技术本质上分离了等待时间为两个阶段。
第一阶段——事务是没有获得任何锁和执行不执行任何写数据库——占了几乎所有的等待时间对磁盘I/O,因为它读取所有数据块需要从磁盘如果他们不是已经在内存中。
第二阶段再执行的事务与严格的两阶段锁定账户上所有的等待时间获得锁。
第二阶段可能,虽然很少,涉及到一个小的等待时间对磁盘I/O如果一个磁盘块,事务需要刷新到内存(通过缓冲区管理器)在第二阶段的开始。
这项技术可能会增加并发事务花费几乎没有时间在磁盘I/O和持有的锁,因此锁持有时间缩短。
在第一阶段事务读取所有数据项的要求并不是已经在内存从磁盘。
获得的锁在第二阶段和事务并几乎没有磁盘I/O在这个阶段。
因此,事务避免花时间在磁盘I/O和持有的锁。
这项技术甚至可能增加磁盘吞吐量为磁盘I/O不是停滞不前的想要一个锁。
考虑下面的场景有严格的两阶段锁定协议:一个事务正在等待一个锁,磁盘是空闲的,有一些项目从磁盘读取。
在这种情况下,磁盘带宽都被浪费了。
但在提议的技术,事务将读取所有需要的物品从磁
盘没有获得任何锁和磁盘带宽可适当利用。
注意,该技术是最有用的,如果计算参与事务少,大部分的时间花费在磁盘I/O和等待锁,通常情况下就是在磁盘常驻数据库。
如果事务是计算密集型,可能会有浪费的工作。
一个优化是保存在一个临时的事务更新缓冲区,而不是重新执行事务,比较数据值的物品锁时使用的值之前。
如果两个值相同的所有商品,那么缓冲更新事务执行的,而不是重新执行整个事务
16. 考虑两个事务T1和T2如下所示。
让TS(T1)< TS(T2),让时间戳测试在每个操作除写(q)外是成功的。
当事务T1并时间戳测试编写(q)它发现,TS(T1)< r时间戳(q),因为TS(T1)< TS(T2)和r的时间戳(q) = TS(T2)。
因此写操作失败和事务T1回滚。
级联导致事务T2也被回滚,因为它使用的值项目p事务T1写的。
如果这种情况确实也是重复每次事务都是重新启动,这可能导致饥饿的两个事务。
17.在文本中,我们考虑了两种方法来处理虚位现象通过锁定。
粗粒度的方法显然也适合的时间戳。
B +树索引基础的方法可以适应时间戳,把指数桶的数据项与时间戳与他们相关联,并且要求所有的读访问使用索引。
我们现在表明,这个简单的方法是可行的。
假设一个事务Ti想访问所有元组与特定范围的搜索键值,使用B +树索引,搜索键。
Ti需要阅读所有的水桶,指数已键值在这个范围内。
可以看出,任何删除或插入一个元组的一个键-值在同样的范围将需要编写一个索引的水桶,Ti阅读。
因此,逻辑冲突转化为一个冲突在一个索引斗,虚位的现象是避免。
18. 注意:在这个问题中所提到的树协议的部分16 1 5中,不同于多粒度协议的16.4节和B +树协议并发性的协议在第16.9节。
一个策略是这里给出早期锁释放。
沿着树从根,如果当前访问节点的孩子不充分,释放锁上举行除了当前节点的所有节点,要求一个独占锁的子节点,之后让它释放锁在当前节点,然后下降到孩子。
另一方面,如果孩子满,保留所有持有的锁,要求一个独占锁上孩子,下降到它在得到锁。
在到达叶节点,开始插入过程。
这一战略的结果只持有锁的完整的索引树节点从叶向上,直到和包括第一非空节点。
一个优化上述策略是可能的。
即使当前节点的孩子已经满了,我们仍然可以释放锁在所有节点上,但当前的一个。
但在得到的子节点的独占锁,我们马上把它。
释放锁在当前节点和留住就锁在适当的分裂孩子,我们陷入这使它当前节点。
与这种优化,在任何时间最多举办两个锁一个父母和一个子节点。