会话层面性能诊断视图
1.v$event_name:
记录当前数据库版本所有的等待事件
2.v$system_wait_class:
可通过该视图获得各类主要等待事件的等待时间和等待次数信息.
例如:
select * from v$system_wait_class order by time_waited;
WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS TOTAL_WAITS TIME_WAITED TOTAL_WAITS_FG TIME_WAITED_FG
------------- ----------- -------------------- ----------- ----------- -------------- --------------
4166625743 3 Administrative 133 54 93 3
3290255840 2 Configuration 119811 230265 96363 226548
3875070507 4 Concurrency 2371858417 23134194 85822446 17090444
4217450380 1 Application 70347904 24713304 70037873 24587623
3386400367 5 Commit 298302396 50525120 298274828 50513369
1893977003 0 Other 1.1445E+10 53282660 665954405 20408974
3871361733 11 Cluster 5207738325 111351503 5185506565 110610664
4108307767 9 System I/O 2212336980 181019051 158115473 14096656
1740759767 8 User I/O 5147790233 683834908 5132924958 682352424
2000153315 7 Network 4.4787E+10 1046527094 4.3872E+10 1043068598
2723168908 6 Idle 3.6560E+10 6.3481E+11 2.4778E+10 5.7743E+11
3.v$session,v$session_wait:(皆与session生命周期有关)
(1)v$session:记录的是数据库当前连接的session信息
(2)v$session_wait:记录的是当前数据库连接的活动session正在等待的资源或事件信息(从10g开始v$session视图已经涵盖该视图全部字段)
例如:
select sid,event,p1,p1text,p2,p2text from v$session_wait(v$session) where event like '%db file sequential read%';
SID EVENT P1 P1TEXT P2 P2TEXT
---------- ---------------------------------------- ---------- ---------- ---------- --------------------
221 db file sequential read 30 file# 1358791 block#
780 db file sequential read 40 file# 78745 block#
2511 db file sequential read 32 file# 2416035 block#
4.v$session_event,v$system_event:
(1)v$session_event
对于v$session以及v$session_wait视图,记录了活动会话当前正在发生的等待,
但是要知道一个活动会话在其生命周期只能可能经历很多等待,这些等待通过v$session_event视图记录.
但是需要注意的是,这个视图记录的是累积信息,而不是单次信息,同一会话对于同一事件发生的多次等待会被累计.
例如:
select sid,event,time_waited,time_waited_micro from v$session_event where sid=2937
SID EVENT TIME_WAITED TIME_WAITED_MICRO
---------- ------------------------------ ----------- -----------------
2937 library cache pin 0 359
2937 library cache lock 0 1063
2937 SQL*Net message to client 0 8
2937 SQL*Net message from client 102 1017273
2937 events in waitclass Other 0 5
(2)v$system_event
v$session_event记录的信息会被累计到v$system_event视图作为数据库整体等待数据保存
例如:
select event,total_waits,time_waited,average_wait from v$system_event where event='library cache lock';
5.v$session_wait_hisotry:
为了更有效地保留session信息,Oracle10g新增v$session_wait_hisotry视图,该视图用以记录活动session的最近10次等待事件,10次由隐藏参数_session_wait_history控制.
select event,p1text,p1,p2text,p2,p3text,p3,wait_time from v$session_wait_history where sid=2937;
(关于db file sequential read等待事件的记录,可以从中获取到每次等待发生的文件号以及数据块.)
6.v$active_session_history(活动session历史信息记录)
Active Session History ASH与v$session为基础,每秒钟采样一次,记录活动会话(非idel会话)的等待事件等一系列信息,对于每个活动的session,每次采样会记录一行,并保存在ASH buffer中.
ASH buffer:select * from v$sgastat where name like '%ASH%';
7.dba_hist_active_sess_history(保留活动历史会话的采集信息)
内存中记录的ASH信息(v$active_session_history)始终是有限的,为了保存历史数据,这些信息最终需要写入磁盘,对于这些历史信息的存储,引出了Oracle 10g的另外一个新特性:自动负载信息库(AWR)
AWR收集关于该特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为每小时一次),为其所有重要统计信息和负载信息执行一次快照,并将这些快照存储在awr中.
AWR的采样工作由后台进程MMON每60分钟执行一次(默认),ASM信息同样会被采样写到AWR负载库.虽然ash buffer被设计为保留1小时信息,但是很多时候这个内存是不足够的,当ASH buffer写满之后,另外一个后台进程MMNL将会主动将ASH信息写出。由于数据量巨大,把所有的ASH数据写到磁盘上是不可接受的,一般是在写到磁盘的时候过滤这个数据,写出的数据占采样数据的百分之10,写出时通过direct path insert完成,尽量减少日志生成,从而最小影响性能,并且ASH信息写出比例受一个隐含参数的控制:_ash_disk_filter_ratio,而写出到AWR负载库的ASH信息记录在AWR的基础表WRH$_ACTIVE_SESSION_HISTORY,而dba_hist_active_sess_history视图是WRH$_ACTIVE_SESSION_HISTORY视图和其他几个视图的联合展现,我们通常通过这个视图进行历史数据的访问.
SELECT dbms_metadata.get_ddl('VIEW', 'DBA_HIST_ACTIVE_SESS_HISTORY','SYS') from dual;
可以看出源表AWR_ROOT_ACTIVE_SESS_HISTORY
SELECT dbms_metadata.get_ddl('VIEW', 'AWR_ROOT_ACTIVE_SESS_HISTORY','SYS') from dual;
可以看出来源于WRH$_ACTIVE_SESSION_HISTORY等一系列视图联合.
通过下图来梳理Oracle以session为起点的一系列用以追踪和诊断的数据库对象.
1.v$session代表数据库活动的开始,是为源起;
2.v$session_wait视图用以实时记录活动session的等待情况,是当前信息(已被v$session涵盖);
3.v$session_wait_history是对v$session_wait的简单增强,记录v$session的最近10次等待;
4.v$active_session_history是ASH的核心,用以记录活动session的历史等待信息,每秒采样1次,这部分内容记录在内存中,期望值是记录1小时的内容,
WRH$_ACTIVE_SESSION_HISTORY是v$active_session_history在AWR中的存储池
5.v$active_session_history中记录的信息会被定期刷新到负载库中,并默认保留一个小时用于分析.而dba_hist_active_sess_history视图就是WRH$_ACTIVE_SESSION_HISTORY视图和其他几个视图的联合展现,我们通常通过这个视图进行历史数据的访问.