1

什么算法oracle用于检测死锁?死锁检测涉及哪些步骤?如果有人逐步解释,我将不胜感激。谢谢。

4

1 回答 1

2

在高层次上,当会话 A 请求一个锁时,Oracle 要么给它,要么记录会话 A 被任何持有它有兴趣获取的锁的会话 B 阻塞。在最简单的情况下,如果 A 在 B 上被阻塞当 B 同时在 A 上被阻塞时,你有一个死锁。更一般地说,当依赖图中存在任何类型的循环时——A 在 B 上被阻塞,B 在 C 上被阻塞,C 在 A 上被阻塞——那么你就有了死锁。为了检测死锁,Oracle 只需定期(每隔几秒)遍历这个依赖关系图,记下任何循环,并通过终止出现 ORA-00060 错误的请求之一来解决死锁。

当然,您可以深入了解为什么会发生死锁、如何防止死锁、Oracle 如何确定哪个会话持有锁等等,但除非您想稍微缩小问题范围,否则这可能会非常复杂。

于 2013-10-05T04:50:27.103 回答