图 8:活动会话等待
该画面显示会话正在等待的等待事件是 enq:TX ?row lock contention。那么导致此问题的 SQL 语句是什么?很简单:画面本身显示了语句 8rkquk6u9fmd0 的 SQL ID(在红色圆圈中)。单击该 SQL ID,调出如图 9 所示的 SQL 画面。

图 9:SQL 详细信息
在该画面上,您可以看到关于它的 SQL 语句以及相关的详细信息,包括执行计划。它表明,这条 SQL 导致行锁争用,因此应用程序设计可能是问题的根源。
栓锁争用
假设单击“Performance”选项卡出现类似图 10 所示的画面。
图 10:“Performance”选项卡,示例 2
在图中,请注意红色矩形中高亮显示的量度。您可以看到在 12:20AM 左右有很多与 CPU 相关的等待,这导致在 CPU 中出现庞大的运行队列。我们需要诊断这一等待。
首先,单击显示 CPU 争用区域的图形(在图上标有“Click Here”),以详细查看该特定等待,如图 11 所示。

图 11:活动会话等待
注意在“Active Sessions Working:CPU Used”图形中带阴影的框 (1)。您可以使用鼠标拖动它来放置焦点。此操作导致以下的饼形图(2 和 3)只在该框所包含的时段内进行计算。在这里我们看到,一个具有 id 8ggw94h7mvxd7 的特定 SQL 正在非常困难地运行 (2)。我们还看到,具有用户名 ARUP 和 SID 265 的用户会话是最主要的运行会话 (3)。单击该会话,查看其详细信息。此操作调出“Session Details”画面。单击选项卡“Wait Events”,调出该会话所经历的等待事件的详细信息,其画面类似于图 12 所示。
图 12:等待事件的详细信息
在该画面中,请注意在红色圆圈中高亮显示的 118 厘秒的最长等待,它在等待库高速缓存。当您单击“Latch:Library Cache”的超链接时,将会看到类似图 13 所示的画面。