ORACLE 性能调优基础--OWI
来源:互联网 发布:手机理财软件哪个安全 编辑:程序博客网 时间:2024/05/18 02:47
一,获取当前等待时间
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类似视图中,缺点是它只收集一段时间上的数据,
而在特定时间点是不可以看到的。
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类似视图中,缺点是它只收集一段时间上的数据,
而在特定时间点是不可以看到的。
- ORACLE 性能调优基础--OWI
- 性能调优基础--OWI学习笔记(一)
- 使用OWI诊断Oracle性能问题
- 性能诊断与调优之OWI--OverView
- 性能诊断与调优之OWI--Components
- Oracle基础性能调优
- 高级owi与oracle性能调整(第一章中的常用脚本)
- 几个常用的脚本(from 高级owi与oracle性能调整)
- 高级OWI与ORACLE性能调整读书笔记之Latch:cache buffers chains争用情形
- 高级OWI与ORACLE性能调整读书笔记之Select/Select引起的read by other session
- 高级OWI与ORACLE性能调整读书笔记之UPDATE/UPADTE引起的buffer busy wait
- 高级OWI与ORACLE性能调整读书笔记之SQL的过程执行
- Oracle OWI等待事件视图
- 解析oracle数据库优化利器OWI
- Oracle锁-OWI体系中的认识
- OWI(Oracle Wait Interface)方法论介绍
- ORACLE9i_性能调优基础十(Oracle Blocks Efficiently)
- Oracle基础--性能配置
- ArcGISEngine10.1访问ArcSDE【一】
- 提高编码效率的编程套路
- Hadoop1.2.1源码解析系列:JT与TT之间的心跳通信机制——TT篇
- 今天不是很忙,将以前看过的收藏的自觉得有点用的文章转帖到这里,共勉
- JavaSE学习 第十七章 Java网络编程
- ORACLE 性能调优基础--OWI
- 最牛B的编码套路
- JAXB使用经验总结
- easyui---分页栏pagination---间隔栏
- Android MediaPlayer与Http Proxy结合之基础篇
- TDLS应用与协议
- [转]eclipse中的两种Jre 及 Jre与Jdk的区别+[原创]在Myeclipse中配置Javadoc的方法
- 从Win8回顾微软技术平台的发展
- 学习linker script网站