如果我们在以下调度中使用Timestamp Ordering进行并发控制:
我的TA说T2,T3,T5是Run和T4,T1是Rollback。我认为这是错误的。 任何专家都可以帮助我们? (即,在这个时间表中哪个事务回滚和哪一个完成?
更新:完成所有工作后的所有交易,提交。
答案 0 :(得分:4)
总的来说,默认情况下,读者不会阻止作者和作者不阻止读者。
写入一行的第一个会话持有一个锁,直到发出提交或回滚为止,其他会话将被该锁写入阻止,但仍然可以读取它。
基于那个
但这并不是导致回滚的原因,并且假设没有发布显式提交或回滚。
答案 1 :(得分:1)
关键是"读者不会阻止作者和作者不阻止读者",如@DavidAldridge所述。 那么交易3将等待transacion 1,然后交易5将等待交易1和3,他们可以等待很长一段时间,等待n秒或不等待,这取决于数据库的参数集。在Oracle中它是如何工作的。
伙计们,因为这是一个竞赛问题,我将假设逻辑并贯彻执行。
关于解释并试图坚持给出的解释很多。这里给出的信息是:用于并发控制的TIMESTAMP ORDERING。然后他给我们:T1,T2到T5。然后我假设T1先来,然后是T2,依此类推,因为事务总是被序列化:一个接一个,基于他们的TIMESTAMP。我确实认为,为了让人们假设“T5读(x)'是第一个交易只是因为文本的处理方式是添加不在那里的信息。它说TIMESTAMP ORDERING并给你T1,T2 ...逻辑说一个接一个。没有事务会回滚,他们只是等待,不仅仅是因为一个事务可能持有一个锁,而另一个事务也试图获得锁将自动回滚。在Oracle事务中,只有在发生死锁时才会自动回滚。由于情况似乎并非如此,因此没有回滚。
答案 2 :(得分:1)
我认为你在这里与oracle标签混淆了。我想你想要基于问题第一行的Timestamp based concurrency control算法,这是计算机科学理论中并发控制的一种非常常见的算法。
此外,您对回滚的使用不正确,因为事务未回滚但已重新启动。 (这也发生在oracle中)
算法的工作原理如下 -
每当事务开始时,都会给它一个时间戳。我们就是这样 可以判断应该应用交易的顺序 因此,给定两个影响同一对象的事务, 具有较早时间戳的事务将被应用 在另一个之前。但是,如果实际上是错误的交易 先呈现,它已中止,必须重新启动
基于此,让我们给我们的交易一个时间戳,如t = 1,2,3,4,5 ......
继续前进,
数据库中的每个对象都有一个读取时间戳,每当读取对象的数据时都会更新,而写入时间戳会在对象的数据发生更改时更新。
在开始时,X和Y的读写时间戳都为0。
以下列方式处理读取请求:
If TS < W-ts(x) then
reject read request and abort corresponding transaction
else
execute transaction
Set R-ts(x) to max{R-ts(x), TS}
写入请求按以下方式处理:
If TS < R-ts(x) or TS < W-ts(x) then
reject write request
else
execute transaction
Set W-ts(x) to TS.
让我们浏览一下我们的对象并应用这些规则。
所以这给了我们一个与你的TA不同的答案,只有T5被回滚并重新启动。
我希望得到纠正,并了解为什么T4和T1被中止并重新启动。
答案 3 :(得分:1)
这不是用我自己的话来解释它,而是一个有用的MSDN链接,它向您显示ROLLBACK TRANSACTION及其工作原理。
https://msdn.microsoft.com/en-us/library/ms181299.aspx?f=255&MSPPError=-2147217396
任何问题都可以随意问我。
答案 4 :(得分:1)
关于锁定,它取决于数据库上设置的隔离级别。
Microsoft on Isolation Levels:
事务隔离级别控制: 是否在读取数据时执行锁定以及请求的锁定类型。 读锁的持有时间。 是否读取操作引用由另一个事务修改的行: 阻止直到行上的独占锁定被释放。 检索语句或事务启动时存在的行的已提交版本。 读取未提交的数据修改。
来源:https://technet.microsoft.com/en-us/library/ms189122(v=sql.105).aspx
E.g。如果您的隔离级别设置为REPEATABLE READ:
&#34;指定语句无法读取已被修改但尚未由其他事务提交的数据,并且没有其他事务可以修改当前事务已读取的数据,直到当前事务为止完成强>&#34;
来源:https://technet.microsoft.com/en-us/library/ms173763(v=sql.105).aspx