ITPub博客

首页 > 数据库 > Oracle > 查看AWR视图

查看AWR视图

原创 Oracle 作者:wolaiye320 时间:2016-06-21 12:00:51 0 删除 编辑

不管是 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,实例名,数据库版本等等信息,

 

生成报表中第一行表格,就是由该视图生成的。如图:


 

 

 

 

 

如果你去分析 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;

 

更多精彩内容访问http://infocool.net

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

下一篇: AWR的Snapshots讲解
请登录后发表评论 登录
全部评论

注册时间:2008-06-23

  • 博文量
    19
  • 访问量
    827664