学用ORACLE AWR和ASH特性(6)-查看AWR视图

三、查看AWR视图

  不管是EM也好,或是前面演示中使用的awr*.sql脚本也好,实质都是访问ORACLE中的部分相关视图来生成统计数据,因此如果DBA对自己的理解能力有足够的自信,也可以直接查询动态性能视图(或相关数据字典)的方式来获取自己想要的那部分性能数据。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,实例名,数据库版本等等信息,生成报表中第一行表格,就是由该视图生成的。如图:

  7607759_200911091023081.gif

  如果你去分析awrrpt.sql脚本的话,会发现其中有如下脚本,上述表格中显示的内容信息,正是来自于下列脚本:

select distinct

(case when cd.dbid = wr.dbid and

cd.name = wr.db_name and

ci.instance_number = wr.instance_number and

ci.instance_name = wr.instance_name

then ¨* ¨

else ¨ ¨

end) || wr.dbid dbbid

, wr.instance_number instt_num

, wr.db_name dbb_name

, wr.instance_name instt_name

, wr.host_name host

from dba_hist_database_instance wr, v$database cd, v$instance ci;
  • DBA_HIST_SNAPSHOT

  该视图用来记录当前数据库收集到的快照信息。相信朋友应该还记得之前使用脚本生成报表时,输入完快照区间后显示的一堆列表,没错,那正是DBA_HIST_SNAPSHOT记录的内容,该段功能对应的代码如下:

select to_char(s.startup_time,¨dd Mon "at" HH24:mi:ss¨) instart_fmt

, di.instance_name inst_name

, di.db_name db_name

, s.snap_id snap_id

, to_char(s.end_interval_time,¨dd Mon YYYY HH24:mi¨) snapdat

, s.snap_level lvl

from dba_hist_snapshot s

, dba_hist_database_instance di

where s.dbid = :dbid

and di.dbid = :dbid

and s.instance_number = :inst_num

and di.instance_number = :inst_num

and di.dbid = s.dbid

and di.instance_number = s.instance_number

and di.startup_time = s.startup_time

and s.end_interval_time >= decode( &num_days

, 0 , to_date(¨31-JAN-9999¨,¨DD-MON-YYYY¨)

, 3.14, s.end_interval_time

, to_date(:max_snap_time,¨dd/mm/yyyy¨) - (&num_days-1))

order by db_name, instance_name, snap_id;

查看之前的文章:

==============================================

学用ORACLE AWR和ASH特性(5)-生成不同时间内的对比统计报表

学用ORACLE AWR和ASH特性(4)-生成指定SQL的统计报表

学用ORACLE AWR和ASH特性(3)-生成指定数据库实例的统计报表

学用ORACLE AWR和ASH特性(2)-生成标准统计报表

学用ORACLE AWR和ASH特性(1)-ASH和AWR的故事

fj.pngwps_clip_image-5112.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-618392/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7607759/viewspace-618392/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值