接查询动态性能视图(或相关数据字典)的方式来获取自己想要的那部分性能数据。ORACLE将这部分性能统计数据保存在DBA_HIST开头的数据字典中,要查询当前实例所有能够访问的DBA_HIST字典,可以通过下列语句:
SQL> select * from dict where table_name like ¨DBA_HIST%¨; TABLE_NAME COMMENTS
------------------------------ -------------------------------------------------------------------------------- DBA_HIST_DATABASE_INSTANCE Database Instance Information DBA_HIST_SNAPSHOT Snapshot Information DBA_HIST_SNAP_ERROR Snapshot Error Information DBA_HIST_BASELINE Baseline Metadata Information
DBA_HIST_WR_CONTROL Workload Repository Control Information DBA_HIST_DATAFILE Names of Datafiles
DBA_HIST_FILESTATXS Datafile Historical Statistics Information DBA_HIST_TEMPFILE Names of Temporary Datafiles
DBA_HIST_TEMPSTATXS Temporary Datafile Historical Statistics Information DBA_HIST_COMP_IOSTAT I/O stats aggregated on component level DBA_HIST_SQLSTAT SQL Historical Statistics Information DBA_HIST_SQLTEXT SQL Text ...................... ........................
ORACLE 数据库中以DBA_HIST命名的视图非常多,下面简单介绍几个,比如说:
?
V$ACTIVE_SESSION_HISTORY
该视图由ASH自动维护,以每秒一次的频率收集当前系统中活动session的信息。虽然
说是记录SESSION的历史记录,不过该视图与V$SESSION还是有差异的。
SQL> desc v$active_session_history;
Name Type Nullable Default Comments ------------------------- ------------ -------- ------- -------- SAMPLE_ID NUMBER Y SAMPLE_TIME TIMESTAMP(3) Y SESSION_ID NUMBER Y SESSION_SERIAL# NUMBER Y USER_ID NUMBER Y SQL_ID VARCHAR2(13) Y SQL_CHILD_NUMBER NUMBER Y SQL_PLAN_HASH_VALUE NUMBER Y FORCE_MATCHING_SIGNATURE NUMBER Y SQL_OPCODE NUMBER Y PLSQL_ENTRY_OBJECT_ID NUMBER Y PLSQL_ENTRY_SUBPROGRAM_ID NUMBER Y PLSQL_OBJECT_ID NUMBER Y PLSQL_SUBPROGRAM_ID NUMBER Y SERVICE_HASH NUMBER Y SESSION_TYPE VARCHAR2(10) Y SESSION_STATE VARCHAR2(7) Y QC_SESSION_ID NUMBER Y
QC_INSTANCE_ID NUMBER Y BLOCKING_SESSION NUMBER Y BLOCKING_SESSION_STATUS VARCHAR2(11) Y BLOCKING_SESSION_SERIAL# NUMBER Y EVENT VARCHAR2(64) Y EVENT_ID NUMBER Y EVENT# NUMBER Y SEQ# NUMBER Y P1TEXT VARCHAR2(64) Y P1 NUMBER Y P2TEXT VARCHAR2(64) Y P2 NUMBER Y P3TEXT VARCHAR2(64) Y P3 NUMBER Y
WAIT_CLASS VARCHAR2(64) Y WAIT_CLASS_ID NUMBER Y WAIT_TIME NUMBER Y TIME_WAITED NUMBER Y XID RAW(8) Y
CURRENT_OBJ# NUMBER Y CURRENT_FILE# NUMBER Y CURRENT_BLOCK# NUMBER Y
PROGRAM VARCHAR2(48) Y MODULE VARCHAR2(48) Y ACTION VARCHAR2(32) Y CLIENT_ID VARCHAR2(64) Y
v$session 中与操作相关的列均被收集,除此之外还冗余了部分列,这是为了方便DBA查询V$ACTIVE_SESSION_HISTORY时能够快速获取到自己需要的数据。
?
DBA_HIST_ACTIVE_SESS_HISTORY
该视图与V$ACTIVE_SESSION_HISTORY的结构灰常灰常灰常的想像,功能也灰常灰常灰常的类似,都是记录活动session的操作记录,所不同点在于,
V$ACTIVE_SESSION_HISTORY是ORACLE自动在内存中维护的,受制于其可用内存区限制,并非所有记录都能保存,而DBA_HIST_ACTIVE_SESS_HISTORY视图则是维护到磁盘中的。简单理解的话,就是说通常情况下,DBA_HIST_ACTIVE_SESS_HISTORY视图的数据量要比V$ACTIVE_SESSION_HISTORY的多。
提示:上述结构并不绝对,因为默认情况下DBA_HIST_ACTIVE_SESS_HISTORY字典的数据每10秒收集一次,而V$ACTIVE_SESSION_HISTORY中则是每秒一次,因此也有可能V$ACTIVE_SESSION_HISTORY中记录量更大。不过相对来说,DBA_HIST字典中保存的数据更长久。
?
DBA_HIST_DATABASE_INSTANCE
该视图用来显示数据库和实例的信息,比如DBID,实例名,数据库版本等等信息,生成报表中第一行表格,就是由该视图生成的。如图:
如果你去分析awrrpt.sql脚本的话,会发现其中有如下脚本,上述表格中显示的内容信息,正是来自于下列脚本:
select distinct
(case when cd.dbid = wr.dbid and cd.name = wr.db_name and
相关推荐: