技术开发 频道

如何查询oracle的系统统计信息

    【IT168 技术文档】Oracle9i开始增加了收集操作系统统计信息的新功能。Oracle可以根据收集到的统计信息判断操作系统的CPU、I/O处理能力,并利用这些统计数据来确定不同执行计划的执行代价。

    这篇文章并不打算讨论操作系统的统计信息的使用和意义,本文只打算找到统计信息的存放位置,或者找到通过SQL语句查询操作系统统计信息的方法。

    其实这个问题是今天同事问我的,他希望查询一下收集的操作系统统计信息,可是又找不到相关的视图。

    其实,Oracle提供的DBMS_STATS包包含一个CREATE_STAT_TABLE过程,通过这个过程可以建立一张表存放用户收集的统计信息。

SQL> EXEC DBMS_STATS.CREATE_STAT_TABLE(USER, 'MY_STATISTICS') PL/SQL 过程已成功完成。 SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('INTERVAL', 1, 'MY_STATISTICS') PL/SQL 过程已成功完成。 SQL> SELECT C2, C3, C4, N1, N2, N3, N4, N5 FROM MY_STATISTICS; C2 C3 C4 N1 N2 N3 N4 N5 ---------------- ---------------- --------- ------ -- --- --- ----- 06-06-2006 23:26 06-06-2006 23:27 CPU_SERIO 12.941 -1 446 895 18280 48 PARIO 36864 -1

      按照上面的步骤,就可以得到存放统计信息的基础表,收集操作系统统计信息后,通过MY_STATISTICS可以看到刚刚收集的统计信息。

    但是,如果在收集统计信息的时候没有指定STATTAB参数,则此时,收集的统计信息直接更新到数据字典。

    虽然Oracle提供了GET_SYSTEM_STATS过程,可以返回指定类型的统计数据,但是Oracle似乎并没有提供可以执行查询的视图。

    Oracle文档中相关的内容完整的翻了一遍,也没有发现Oracle给出这个问题的答案。

    不过,要自己找到答案也并不困难:

SQL> ALTER SESSION SET SQL_TRACE = TRUE; 会话已更改。 SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS PL/SQL 过程已成功完成。 SQL> ALTER SESSION SET SQL_TRACE = FALSE; 会话已更改。

     然后在得到的TRACE文件中查找INSERT操作,很容易就可以发现存储系统统计信息的表:SYS.AUX_STATS$。

SQL> SELECT * FROM SYS.AUX_STATS$; SNAME PNAME PVAL1 PVAL2 ------------------------------ ---------- ---------- --------------------- SYSSTATS_INFO STATUS NOWORKLOAD SYSSTATS_INFO DSTART 06-07-2006 00:46 SYSSTATS_INFO DSTOP 06-07-2006 00:46 SYSSTATS_INFO FLAGS 1

    很多情况下,都可以用类似的方法来检查Oracle在后台进行的操作。

0
相关文章