Oracle 会话层面性能诊断视图

会话层面性能诊断视图

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视图和其他几个视图的联合展现,我们通常通过这个视图进行历史数据的访问.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值