您的位置:首页 > 数据库 > Oracle

ORACLE 性能调优基础--OWI

2013-12-06 09:48 393 查看
一,获取当前等待时间

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类似视图中,缺点是它只收集一段时间上的数据,

而在特定时间点是不可以看到的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: