【问题标题】:How can I find out what's causing my Oracle transaction to hang with a wait class of Cluster?如何找出导致我的 Oracle 事务因等待类集群而挂起的原因?
【发布时间】:2020-06-07 04:04:47
【问题描述】:

我有一个每天运行数百次的 Oracle 程序。也许每隔几天,会话就会挂起等待类的集群。我已经看到它挂了几个小时,而且我总是不得不终止它。

我看到信息集群等待导致性能问题,但没有任何关于它们导致无限期挂起的信息。我正在尝试找出我可以运行的任何查询,以找出导致下次弹出等待时的原因,或者任何可能导致此问题的罪魁祸首的指针。

【问题讨论】:

  • 所以查询可能试图从其他集群节点提取当前数据块(可能为连接或排序构建临时结果集?)并且这些块由于某种原因不可用(锁定)或者您的 RAC 互连中可能没有足够的吞吐量来足够快地完成所有操作。检查您在相关期间的 ADDM 或 AWR 报告,以更详细地了解它们所显示的情况。

标签: oracle cluster-computing wait


【解决方案1】:

调查等待的最佳方法是查看活动会话历史视图,例如GV$ACTIVE_SESSION_HISTORYDBA_HIST_ACTIVE_SESS_HISTORY。无论您使用什么工具来查看数据库性能,都可能已经是这些视图中数据的摘要,因此对于高级故障排除,您需要自己深入研究它们。

GV$ 视图包含内存中的数据,通常只需要几个小时,而DBA_HIST 视图通常包含几天的数据。如果可能,请使用 GV$ 视图,因为如果有大量历史数据,DBA_HIST 视图可能会很慢。

我无法确切告诉您要查找哪些列 - 您只是在寻找“奇怪”的内容。但根据我的经验,以下列是解决特定等待问题的最佳选择:

  1. INST_ID 和 SESSION_ID - 确定哪个会话。
  2. SQL_ID - 即使您正在运行一个过程,问题很可能来自其中的一条 SQL 语句。如果语句有问题,您需要查看执行计划,这是另一种类型的故障排除。
  3. EVENT - 这将告诉您等待的集群类型。
  4. P1TEXT/P1、P2TEXT/P2、P3TEXT/P3 - 这些值会根据等待事件而变化。例如,如果 P1TEXT 是“file#”,那么 P1 将是一个对应于 DBA_DATA_FILES.FILE_ID 的数字。如果您有一个“热块”,即磁盘或 SAN 的某些部分被过度使用且性能不佳,它可能会显示在此处。
  5. CURRENT_OBJ# - 加入 DBA_OBJECTS.OBJECT_ID 以找出正在等待的对象。

(并确保您使用的是 IDE 而不是命令行。在 SQL*Plus 中查看这么多数据几乎是不可能的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2010-12-08
    • 2017-03-24
    • 2014-01-17
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多