ORACLE 性能调优基础--OWI

一,获取当前等待时间

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类似视图中,缺点是它只收集一段时间上的数据,
而在特定时间点是不可以看到的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值