jeffspost Asked: 2009-09-18 11:58:26 +0800 CST2009-09-18 11:58:26 +0800 CST 2009-09-18 11:58:26 +0800 CST Oracle 数据库死锁 772 我们有一个数据库正在“减速”的情况。通常需要一两秒钟的数据库操作需要十倍的时间。发生这种情况时,数据库中似乎有大量锁。大量的死锁会造成数据库范围内的缓慢吗? oracle 3 个回答 Voted Best Answer Gary 2009-09-18T14:38:54+08:002009-09-18T14:38:54+08:00 死锁是一种特殊的情况,其中事务 A 有一个锁,然后尝试锁定当前被事务 B 锁定并且必须等待的东西。然后事务 B 尝试锁定当前由事务 A 锁定的项目。数据库“注意到”这种情况无法自然解决,因此其中一个事务出错并强制它回滚。 正如其他人所说,这是不寻常的,我希望您会收到有关死锁的应用程序错误报告。 相反,我猜测“某些东西”发生了变化。它可能是锁,但同样可能是因为事务需要更长的时间(因此锁的持有时间更长),所以您有更多的东西被锁定。 如果您使用 AWR/ASH(诊断/调整包)的 10g/11g,OEM 应该能够帮助诊断情况。 如果没有,请查看 V$SESSION 并查看是否有很多设置了 BLOCKING_SESSION 的会话。这表明他们正在等待锁。如果会话正在等待它们,您只需要担心锁,所以使用它而不是锁的数量。如果这不表示有问题,请转到 v$session_event 并查看大部分时间由哪些 wait_class 条目负责。 Nathan Feger 2009-09-18T12:38:38+08:002009-09-18T12:38:38+08:00 它可能是死锁,但数据库通常可以判断何时存在死锁,并且在这种情况下会以死锁异常终止连接。 我已经在我的 oracle 数据库上看到了这种情况,当资源运行不足、数据库内存不足并且必须交换到磁盘时,就会发生这种情况。 如果许多作业都在队列中等待释放相同的资源,则尤其如此。 Igal Serban 2009-09-18T13:13:35+08:002009-09-18T13:13:35+08:00 死锁记录在跟踪文件中,因此您可以轻松判断这是否是问题所在。首先分析常见的嫌疑人。查询解释计划、索引、统计信息等。
死锁是一种特殊的情况,其中事务 A 有一个锁,然后尝试锁定当前被事务 B 锁定并且必须等待的东西。然后事务 B 尝试锁定当前由事务 A 锁定的项目。数据库“注意到”这种情况无法自然解决,因此其中一个事务出错并强制它回滚。
正如其他人所说,这是不寻常的,我希望您会收到有关死锁的应用程序错误报告。
相反,我猜测“某些东西”发生了变化。它可能是锁,但同样可能是因为事务需要更长的时间(因此锁的持有时间更长),所以您有更多的东西被锁定。
如果您使用 AWR/ASH(诊断/调整包)的 10g/11g,OEM 应该能够帮助诊断情况。
如果没有,请查看 V$SESSION 并查看是否有很多设置了 BLOCKING_SESSION 的会话。这表明他们正在等待锁。如果会话正在等待它们,您只需要担心锁,所以使用它而不是锁的数量。如果这不表示有问题,请转到 v$session_event 并查看大部分时间由哪些 wait_class 条目负责。
它可能是死锁,但数据库通常可以判断何时存在死锁,并且在这种情况下会以死锁异常终止连接。
我已经在我的 oracle 数据库上看到了这种情况,当资源运行不足、数据库内存不足并且必须交换到磁盘时,就会发生这种情况。
如果许多作业都在队列中等待释放相同的资源,则尤其如此。
死锁记录在跟踪文件中,因此您可以轻松判断这是否是问题所在。首先分析常见的嫌疑人。查询解释计划、索引、统计信息等。