两个锁定是否适用于每个交易或整个计划?

时间:2018-04-29 18:44:01

标签: transactions locking rdbms

背景

根据Database Administrators Stack Exchange中提出的问题,我似乎误解了2PL的内容。

以下是我从数据库系统中理解的定义:完整的书籍,第二版(ISBN 9780131873254)Page 900 - 901:

  

有一个令人惊讶的情况,称为两阶段锁定(或 2PL ),在此条件下我们可以保证一致事务的合法时间表是冲突可序列化的:< / p>      

      
  • 在每个交易中,所有锁定操作都在所有解锁操作之前。
  •   
     

&#34;两个阶段&#34;因此,2PL所引用的是第一阶段,其中获得锁定,第二阶段,其中锁定被放弃。两阶段锁定是一种条件,如一致性,对事务中的操作顺序。遵守2PL协议的交易被称为两阶段锁定交易或第二方物流交易。

问题

我在作业中遇到了这个问题,其中提出了以下问题:

  
      
  1. 以下行动的顺序是否遵循2PL? (L表示锁定,U表示解锁,R表示读取,W表示写入,O表示输出。因此L1(A)表示事务1锁定为A.我们不在此处显示输入,而是假设这将发生在用R或W)。

     a. Start T1.
     b. L1(A)
     c. R1(A)
     d. W1(A)
     e. O1(A)
     f. Start T2.
     g. L2(C)
     h. L1(B)
     i. U1(A)
     j. L2(A)
     k. W1(B)
     l. Commit T1
     m. R2(A)
     n. W2(C)
     o. U1(B)
     p. Commit T2
     q. U2(A)
     r. U2(C)
    
  2.   

我的回答

我理解2PL意味着在所有解锁之前获取所有锁定在交易级别而不是整个计划级别,因为这就是教科书(和链接问题上的幻灯片)来自DBA Stack Exchange)说。鉴于上述推理,我写了这个答案:

  

两阶段锁定:在每个事务中,所有锁定操作都在解锁之前   动作。

     

第一阶段:获得的所有锁定,第二阶段,锁定放弃。

     

本文描述的行动顺序遵循2PL,因为所有   每个事务中的锁定操作都在所有锁定操作之前。 A和B是   由事务一锁定,这两者之间没有解锁   锁。仅在A和B都被锁定后才会解锁。对于   事务2,A和C在任何解锁发生之前被锁定。因此,从那以后   动作序列中的所有锁定动作都发生在任何动作之前   解锁发生时,此序列满足2PL。

因此 2PL ....

...但是,由于以下原因,这被标记为错误:

  

应在解锁之前获取所有锁   这不是这种情况。 T1解锁不再锁定的信号   应该从任何交易发生,但下一个行动涉及T2调用   锁定A.这就是我标记你的原因。

因此,我不确定我是否在这里误解了一些内容,并希望得到一个可靠的答案。

问题

确定数据库计划是否在2PL中,每次在每个事务中锁定和解锁的顺序,或整个计划中锁定和解锁的顺序是什么?

0 个答案:

没有答案