在一些特殊情况下,生产环境中top SQL会让DBA捉摸不定。比如一个由复杂分支条件所生成的动态语句;第三方软件或者代码本身对会话环境进行了修改,导致无法正确重现问题语句的查询计划;语句过长导致无法获取正确的全部语句,等等。这时,我们可以考虑设置statspack为更高级别(默认级别为5),以获取相关语句的详细信息。具体过程如下:
获取级别6的statspack的快照:
SQL> exec statspack.SNAP(i_snap_level => 6);
N分钟后….
SQL> exec statspack.SNAP(i_snap_level => 6);
获取statspack报告
SQL> @?/rdbms/admin/spreport.sql
... …
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.
Listing all Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- --------------------
edgar EDGAR 1 28 Dec 2005 15:32 5
11 03 Jan 2006 09:54 5
12 03 Jan 2006 09:54 5
21 11 May 2007 13:33 6
31 11 May 2007 13:34 6
IXDBA.NET社区论坛
在选取快照时,可以看到我们刚才生成的两个快照级别为6。
查看报告,可以看到报告内容比我们普通的statspack报告更加详细(这些不是本文重点,不做具体解释)。仔细观察top SQL部分,你会发现报告中多出了一列“Old Hash Value”,找到你需要的语句,记下它的这个hash值。
CPU CPU per Elapsd Old