3

我有一台机器的回溯,其中以下查询似乎挂了好几天:

SELECT table_name FROM user_tables

什么可能产生这样的锁?用户永远不能修改这个表;并且该查询的许多后续实例都成功运行。

4

1 回答 1

3

因此,由于条件不再存在,因此无法判断发生了什么。

但是,如果将来再次发生这种情况或类似情况,您将需要使用 Oracle 的等待接口。也就是看V$SESSION

首先,您需要确定进程是在旋转(即,在 CPU 上)还是阻塞(即,等待等待事件)。确定这一点的方法是查看该STATE列:

  • 如果 STATE 为'WAITING',则会话被阻止。如果是这种情况,那么 EVENT 列应该描述会话正在等待的事件。
  • 如果状态不是“等待”,则会话在 CPU 上,事件列是它等待的最后一件事。
    • 如果 STATE 为'WAITED KNOWN TIME',则 WAIT_TIME 是以厘秒为单位等待的时间。
    • 如果 STATE 为'WAITED SHORT TIME',则会话等待不到一厘秒。
    • 如果 STATE 为'WAITED UNKNOWN TIME',则等待时间未知,因为 timed_statistics 为会话设置为 FALSE。

希望有帮助。

于 2012-03-13T13:39:40.243 回答