一,获取当前等待时间
1,v$session的增强
select wait_class,event,p1,p2,p3 from v$session_wait
minus
select wait_class,event,p1,p2,p3 from v$session;
2,v$event_name视图的说明作用
如果不确定p1-p3意义,可以查询v$event_name视图。
select wait_class,name,parameter1,parameter2,parameter3
from v$event_name
where name='pmon timer'
其中parameter1-parameter3是该字段的含义,而v$session与v$session_wait中
是当前session正在等待的实际参数值。
select wait_class,name,parameter1,parameter2,parameter3
from v$event_name
where name='pmon timer';
WAIT_CLASS NAME PARAMETER1 PARAMETER2 PARAMETER3
Idle pmon timer duration
duration是持续时间的意思。
3,p1,p2,p3确定所等待的资源
比如db file sequential read 的三个参数在v$event_name中
的意思就是:file#,block#,blocks,即等待单块读的块位置,由
file#.block#确定,还有就是等待读取的块数blocks。
enq: TX - row lock contention等待事件的特殊性:
PARAMETER1 PARAMETER2 PARAMETER3
name|mode usn<<16|slot sequence
举例:
select p1,p2,p3
from v$session
where event='enq: TX - row lock contention';
P1 P2 P3
1415053318 131096 562
select xidusn,xidslot,xidsqn from v$transaction;
2 24 562
select trunc(p2/power(2,16)) as xidusn, --即取整为usn
mod(p2,power(2,16)) as xidslot, --模为slot
p3 xidsqn
from v$session where wait_class<>'Idle';
2 24 562
这样,利用相应的等待事件对应的p1,p2,p3就能知道当前的资源争用情况。
4,等待现象
oracle利用等待时间,等待次数,超时次数来体现一个等待事件;如下表述:
在10秒时间里发生了10000次latch free等待时间,共有5次超时。
用户感受到的只有等待时间,所以有下面关系:
响应时间=服务时间(service time)+等待时间。
所以降低响应时间就应该从降低服务时间或者等待时间方面来考虑。
二,OWI特点
1,面向问题的OWI
使用OWI可以确定当前系统正存在的严重问题,比如db运行
了100个小时,而通过OWI我们确定这其中有30小时发生在library cache上,
那么这样系统的真正问题就可以确定了。
buffer cache hit ratio(块缓存命中率)失效的原因:
千兆内存的出现,数十个cpu的出现,这样情况下BCHR倒不是很重要,
锁存器的争用在这种情况下是要急需解决的。
小内存,小数量cpu时BCHR才重要。
2,定量的OWI
拒绝推测就是OWI出现的原因,比如:观察
过去5分钟等待现象,可以看到DB CPU使用时间中
有50%的latch:library cache,而几乎没有latch:shared pool
再观察parse time(total)发现是平时的10倍,这说明发生了
过度的软解析,这样问题就明确了。
3,预示性的OWI
只有对oracle有足够深的了解后才可以通过观察等待事件,对症下药。
就像医生对人的身体有足够的了解后才能够治病一样。
4,不断完善的OWI
更明确的等待事件名称,更细度化的名称分类,更多的等待事件引入等。
三,OWI工具
OWI动态视图
其它重要视图
扩展的sql 跟踪
oradebug,dump
awr
1,动态性能视图
1):v$event_name视图使用
EVENT#
EVENT_ID
事件id
NAME
事件名称
PARAMETER1
PARAMETER2
PARAMETER3
事件相关参数
WAIT_CLASS_ID
WAIT_CLASS#
WAIT_CLASS
事件类
2):v$system_event视图使用
select TOTAL_WAITS, --总的等待次数
TOTAL_TIMEOUTS, --总等待的超时次数
TIME_WAITED, --总的等待时间
AVERAGE_WAIT, --平均每次等待时间
TIME_WAITED_MICRO --总的等待时间
from v$system_event;
就是系统启动到现在的等待时间的累计信息。
3):v$session_event视图使用
记录当前会话自登录以来的事件累计信息
select sid,
total_waits,
total_timeouts,
time_waited,
average_wait,
max_wait,
time_waited_micro
from v$session_wait;
这是session当前事件的情况,注意其中的sid,max_wait特殊列。
4):实时等待信息
v$session_wait视图使用
这个视图只要关注state 为waiting的且wait_class不是idle的才有意义。
5):v$session_wait_history记录会话等待历史信息
6):v$system_wait_class
记录的是系统自启动以来,必生的等待类的等待次数和等待总时间。
7):v$session_wait_class
记录的是会话的等待类的次数和总的事件。
8):v$event_histogram
主要是wait_time_milli(毫秒),wait_count
也就是在wait_time_milli以下的wait次数。
2,其它动态性能视图
1):latch类
v$latch,v$latch_children,v$latch_parent,v$latch_holder
2):lock类
v$lock,v$locked_object,v$equeue_lock
3):library 类
v$librarycache,x$kgllk,x$kglpn
4):行高速类
v$rowcache,v$rowcache_parent
5):segment类
v$segment_statistics
它提供了实例启动以后v$sesstat和v$sysstat无法提供的统计信息。
6):Time Model时间模型
v$sess_time_model,v$sys_time_model
7):块
v$bh,x$bh
8):ASH
v$active_session_history
10g新引入,伴随awr特性,oracle利用直接内存访问(Direct Memory Access)第秒更新一次ash数据,
在大部分动态性能监视工具上都使用DMA方式。
2,扩展的sql跟踪
1):10046主要提供的就是sql的跟踪,激活方法:
alter session set events '10046 trace name context forever,level 12';
alter session set events '10046 trace name context off';
exec dbms_system.set_bool_param_in_session(sid=>,serial=>,parname=>,bval=>);
exec dbms_system.set_int_param_in_session(sid=>,serial=>,parname=>,intval=>);
exec dbms_system.set_ev(sid,serial#,10046,12,'');
10g后建议使用dbms_monitor的强大功能:
可以在v$client_stats,v$serv_mod_act_stats中观察收集的信息。
强大的oradebug:
oradebug setospid 2028
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug event 10046 trace name context off
不懂的可以oradebug help
2):oradebug与转储
oradebug setmypid --绑定当前会话
oradebug dump
library_cache/row_cache/buffers/enqueues/latches/headdump/systemstate/processstate 10
3):oradebug控制进程
oradebug setospid 24234
oradebug suspend
oradebug resume
3,awr自动工作负荷库
所有收集的数据都放在dba_hist_xxx类似视图中,缺点是它只收集一段时间上的数据,
而在特定时间点是不可以看到的。
from: http://hi.baidu.com/goodlisf/item/3a5c2bd623824bc91a72b405
1,v$session的增强
select wait_class,event,p1,p2,p3 from v$session_wait
minus
select wait_class,event,p1,p2,p3 from v$session;
2,v$event_name视图的说明作用
如果不确定p1-p3意义,可以查询v$event_name视图。
select wait_class,name,parameter1,parameter2,parameter3
from v$event_name
where name='pmon timer'
其中parameter1-parameter3是该字段的含义,而v$session与v$session_wait中
是当前session正在等待的实际参数值。
select wait_class,name,parameter1,parameter2,parameter3
from v$event_name
where name='pmon timer';
WAIT_CLASS NAME PARAMETER1 PARAMETER2 PARAMETER3
Idle pmon timer duration
duration是持续时间的意思。
3,p1,p2,p3确定所等待的资源
比如db file sequential read 的三个参数在v$event_name中
的意思就是:file#,block#,blocks,即等待单块读的块位置,由
file#.block#确定,还有就是等待读取的块数blocks。
enq: TX - row lock contention等待事件的特殊性:
PARAMETER1 PARAMETER2 PARAMETER3
name|mode usn<<16|slot sequence
举例:
select p1,p2,p3
from v$session
where event='enq: TX - row lock contention';
P1 P2 P3
1415053318 131096 562
select xidusn,xidslot,xidsqn from v$transaction;
2 24 562
select trunc(p2/power(2,16)) as xidusn, --即取整为usn
mod(p2,power(2,16)) as xidslot, --模为slot
p3 xidsqn
from v$session where wait_class<>'Idle';
2 24 562
这样,利用相应的等待事件对应的p1,p2,p3就能知道当前的资源争用情况。
4,等待现象
oracle利用等待时间,等待次数,超时次数来体现一个等待事件;如下表述:
在10秒时间里发生了10000次latch free等待时间,共有5次超时。
用户感受到的只有等待时间,所以有下面关系:
响应时间=服务时间(service time)+等待时间。
所以降低响应时间就应该从降低服务时间或者等待时间方面来考虑。
二,OWI特点
1,面向问题的OWI
使用OWI可以确定当前系统正存在的严重问题,比如db运行
了100个小时,而通过OWI我们确定这其中有30小时发生在library cache上,
那么这样系统的真正问题就可以确定了。
buffer cache hit ratio(块缓存命中率)失效的原因:
千兆内存的出现,数十个cpu的出现,这样情况下BCHR倒不是很重要,
锁存器的争用在这种情况下是要急需解决的。
小内存,小数量cpu时BCHR才重要。
2,定量的OWI
拒绝推测就是OWI出现的原因,比如:观察
过去5分钟等待现象,可以看到DB CPU使用时间中
有50%的latch:library cache,而几乎没有latch:shared pool
再观察parse time(total)发现是平时的10倍,这说明发生了
过度的软解析,这样问题就明确了。
3,预示性的OWI
只有对oracle有足够深的了解后才可以通过观察等待事件,对症下药。
就像医生对人的身体有足够的了解后才能够治病一样。
4,不断完善的OWI
更明确的等待事件名称,更细度化的名称分类,更多的等待事件引入等。
三,OWI工具
OWI动态视图
其它重要视图
扩展的sql 跟踪
oradebug,dump
awr
1,动态性能视图
1):v$event_name视图使用
EVENT#
EVENT_ID
事件id
NAME
事件名称
PARAMETER1
PARAMETER2
PARAMETER3
事件相关参数
WAIT_CLASS_ID
WAIT_CLASS#
WAIT_CLASS
事件类
2):v$system_event视图使用
select TOTAL_WAITS, --总的等待次数
TOTAL_TIMEOUTS, --总等待的超时次数
TIME_WAITED, --总的等待时间
AVERAGE_WAIT, --平均每次等待时间
TIME_WAITED_MICRO --总的等待时间
from v$system_event;
就是系统启动到现在的等待时间的累计信息。
3):v$session_event视图使用
记录当前会话自登录以来的事件累计信息
select sid,
total_waits,
total_timeouts,
time_waited,
average_wait,
max_wait,
time_waited_micro
from v$session_wait;
这是session当前事件的情况,注意其中的sid,max_wait特殊列。
4):实时等待信息
v$session_wait视图使用
这个视图只要关注state 为waiting的且wait_class不是idle的才有意义。
5):v$session_wait_history记录会话等待历史信息
6):v$system_wait_class
记录的是系统自启动以来,必生的等待类的等待次数和等待总时间。
7):v$session_wait_class
记录的是会话的等待类的次数和总的事件。
8):v$event_histogram
主要是wait_time_milli(毫秒),wait_count
也就是在wait_time_milli以下的wait次数。
2,其它动态性能视图
1):latch类
v$latch,v$latch_children,v$latch_parent,v$latch_holder
2):lock类
v$lock,v$locked_object,v$equeue_lock
3):library 类
v$librarycache,x$kgllk,x$kglpn
4):行高速类
v$rowcache,v$rowcache_parent
5):segment类
v$segment_statistics
它提供了实例启动以后v$sesstat和v$sysstat无法提供的统计信息。
6):Time Model时间模型
v$sess_time_model,v$sys_time_model
7):块
v$bh,x$bh
8):ASH
v$active_session_history
10g新引入,伴随awr特性,oracle利用直接内存访问(Direct Memory Access)第秒更新一次ash数据,
在大部分动态性能监视工具上都使用DMA方式。
2,扩展的sql跟踪
1):10046主要提供的就是sql的跟踪,激活方法:
alter session set events '10046 trace name context forever,level 12';
alter session set events '10046 trace name context off';
exec dbms_system.set_bool_param_in_session(sid=>,serial=>,parname=>,bval=>);
exec dbms_system.set_int_param_in_session(sid=>,serial=>,parname=>,intval=>);
exec dbms_system.set_ev(sid,serial#,10046,12,'');
10g后建议使用dbms_monitor的强大功能:
可以在v$client_stats,v$serv_mod_act_stats中观察收集的信息。
强大的oradebug:
oradebug setospid 2028
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
oradebug event 10046 trace name context off
不懂的可以oradebug help
2):oradebug与转储
oradebug setmypid --绑定当前会话
oradebug dump
library_cache/row_cache/buffers/enqueues/latches/headdump/systemstate/processstate 10
3):oradebug控制进程
oradebug setospid 24234
oradebug suspend
oradebug resume
3,awr自动工作负荷库
所有收集的数据都放在dba_hist_xxx类似视图中,缺点是它只收集一段时间上的数据,
而在特定时间点是不可以看到的。
from: http://hi.baidu.com/goodlisf/item/3a5c2bd623824bc91a72b405