oracle时间模型
Oracle在9i或者早期的版本,对于性能优化方面,主要采用命中率模型,后面的版本,也保留着命中率模型,
比如在awr报告中,Instance Efficiency Percentages (Target 100%)就有关于buffer cache,library cache等相关的命中率。
命中率在性能优化时主要体现在:
- 当命中率不高时,可以通过参数的调整,提高命中率,从而可以提高系统的处理能力
不过命中率的弊端也显而易见:
- 命中率无法看到系统的cpu和IO处理能力的分配。
- 当系统存在性能问题时,比如:应用并发设计问题,锁争用等问题时,命中率无法有效的反映到。
所以,oracle引入了时间模型的概念:
这里有几个概念:
- 响应时间=服务时间+等待时间
- 从数据库的角度等价于:数据库响应时间=cpu时间+等待时间。
- elapse time:指时空上的物理时间
- db time:db time反映系统整体的资源(cpu,IO)被oracle使用的百分比情况,以user call为视角
- cpu time:指cpu的使用的有效时间
Db time= DB CPU+Foreground NO-Idle wait time + DB CPU ON QUEUE
这里边:
- db cpu即数据库任务使用cpu的时间
- Foreground NO-Idle wait time:非空闲的等待(不包括backgroud进程)
- DB CPU ON QUEUE:这里代表的是ready to run,但没有获得cpu运行时间片的在队列中等待时间
下面对数据库进行cpu密集型的测试:
$ cat testcpu.sh
#!/bin/sh
. /home/oracle/.bash_profile
sqlplus -S /nolog<<EOF
conn /as sysdba
declare
cnt number;
p number;
begin
cnt:=dbms_random.value(1,1000000);
p:=dbms_random.value(1,1000000);
while(1>0) loop
cnt:=mod(cnt*p,1000000);
end loop;
end;
/
EOF
###################################################
cat thread.sh
#!/bin/sh
for((i=1;i<=16;i++))
do
/home/oracle/testcpu.sh &
done
分别16,32个线程进行压力测试:
thread cpu loadavg(1min) db time cpu time elapse time
16 100% 16.08 31,138s 31,069s 34.45 (mins)
32 100% 31.81 54,812s 28,014s 30.16 (mins)
这里cpu被完全利用,cpu time大小为30*60*16=28,800s;(上面实验中取的awr时间在30分钟左右)
而db time会随着线程数的增加有所增加,虽然可能没有获得cpu时间,但是在run queue队列上,也会计入db time。
下面看下具体的awr报告:
16个并发进程下:
<pre class="brush: sql; title: ; notranslate" title="">
Snap Id Snap Time Sessions Curs/Sess
--------- ------------------- -------- ---------
Begin Snap: 14551 18-Apr-12 23:00:25 36 2.1
End Snap: 14552 18-Apr-12 23:34:51 20 2.1
Elapsed: 34.45 (mins)
DB Time: 518.97 (mins) Time Model Statistics DB/Inst: xxx Snaps: 14551-14552
-> Total time in database user-calls (DB Time): 31138.3s
-> Statistics including the word "background" measure background process
time, and so do not contribute to the DB time statistic
-> Ordered by % or DB time desc, Statistic name Statistic Name Time (s) % of DB Time
------------------------------------------ ------------------ ------------
sql execute elapsed time 31,137.4 100.0
DB CPU 31,068.7 99.8
PL/SQL execution elapsed time 31,065.0 99.8
parse time elapsed 3.4 .0
hard parse elapsed time 3.3 .0
hard parse (sharing criteria) elapsed time 0.2 .0
hard parse (bind mismatch) elapsed time 0.1 .0
DB time 31,138.3 N/A
-------------------------------------------------------------
32个并发进程下:
Snap Id Snap Time Sessions Curs/Sess
--------- ------------------- -------- ---------
Begin Snap: 14552 18-Apr-12 23:34:51 20 2.1
End Snap: 14554 19-Apr-12 00:05:01 52 2.5
Elapsed: 30.16 (mins)
DB Time: 913.54 (mins)
Time Model Statistics DB/Inst: xxx Snaps: 14552-14554
-> Total time in database user-calls (DB Time): 54812.4s
-> Statistics including the word "background" measure background process
time, and so do not contribute to the DB time statistic
-> Ordered by % or DB time desc, Statistic name Statistic Name Time (s) % of DB Time
------------------------------------------ ------------------ ------------
sql execute elapsed time 54,811.1 100.0
PL/SQL execution elapsed time 54,776.6 99.9
DB CPU 28,013.8 51.1
parse time elapsed 2.8 .0
hard parse elapsed time 2.6 .0
hard parse (sharing criteria) elapsed time 2.5 .0
hard parse (bind mismatch) elapsed time 0.2 .0
DB time 54,812.4 N/A
了解了awr里的时间模型:那么接下来:
1,等待事件
oracle记录埋点的事件所花费的时间,不同的版本等待事件略有差异。
查询v$system_event来监控到oracle各种等待时间的时间,就可以诊断数据库的性能瓶颈了。
2,top sql:
oracle在sql的执行监控中记录了八个时间:
APPLICATION_WAIT_TIME,CONCURRENCY_WAIT_TIME,CLUSTER_WAIT_TIME,USER_IO_WAIT_TIME,PLSQL_EXEC_TIME,JAVA_EXEC_TIME,CPU_TIME,ELAPSED_TIME。
oracle可以根据这些时间来监控sql的执行情况。
oracle时间模型的更多相关文章
- Oracle Time Model Statistics(时间模型统计)
Oracle数据库从10g開始,启用以时间模型统计为主.命中率为辅等性能度量指标.基于时间模型统计,主要是基于操作类型測量在数据库中花费的时间的统计信息.最重要的时间模型统计是数据库时间.或DB时间. ...
- 【Oracle】转:通过案例学调优之--Oracle Time Model(时间模型)
转自:http://blog.51cto.com/tiany/1596012 通过案例学调优之--Oracle Time Model(时间模型) 数据库时间 优化不仅仅是缩短等待时间.优化旨在缩短最终 ...
- 【Oracle】Oracle时间日期格式
to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错. 即按照第二个参数的格式解释第一个参数. to_char(日期,& ...
- ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...
- oracle 时间函数
加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from ...
- ORACLE时间日期格式使用总结(参考网上资料汇总)
Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟 ...
- Oracle时间日期函数
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 ...
- Oracle时间换算:日,月,周数,星期,年
http://blog.csdn.net/liangweiwei130/article/details/37930383 Oracle时间换算,留做记号!
- ORACLE时间函数(SYSDATE)简析
ORACLE时间函数(SYSDATE)简析 分类: 原文地址:ORACLE时间函数(SYSDATE)简析 作者:skylway 加法 select sysdate,add_months(sysdate ...
随机推荐
- JQuery Jplayer play无效的问题
最近折腾个H5. 用到Jplayer, 用着不错,至少兼容性强一些. 但是安卓这辆公共汽车型号实在太多.不小心上了一辆奇葩的就容易震到生活不能自理. 我在一台手机上的五六个浏览器上测试,都可以. 把该 ...
- 使用solr搭建你的全文检索
Solr 是一个可供企业使用的.基于 Lucene 的开箱即用的搜索服务器.对Lucene不熟?那么建议先看看下面两篇文档: 实战Lucene,第 1 部分: 初识 Lucene:http://www ...
- spring定时任务的配置
定时任务配置分为三个步骤: 1.定义任务 2.任务执行策略配置 3.启动任务 1.定义任务 <!--要定时执行的方法--> <bean id="testTaskJob&qu ...
- 利用Highcharts制作web图表学习(二)
最近中海油的项目需要用到图表展示数据,最近还是一直边学习边开发,今天做了一个展示,炼化厂加热炉效率展示的柱状图,把代码贴出来,大家指点一下互相学习,我是通过数组给Highcharts绑定的值, ...
- 漫话JavaScript与异步·第一话——异步:何处惹尘埃
自JavaScript诞生之日起,频繁与异步打交道便是这门语言的使命,并为此衍生出了许多设计和理念.因此,深入理解异步的概念对于前端工程师来说极为重要. 什么是异步? 程序是分"块" ...
- 国庆第三天2014年10月3日10:21:39,Nutz,WebCollector,jsoup
(1)做得好,做得快,只能选择一样. (2)时间过得很快,你没法在假期的一天里完成更多的计划.假期全部由自己支配,相对长一点的睡眠,新加入的娱乐(视频或者游戏),你不比在工作中更有效率. (3)每天练 ...
- 字节序转换与结构体位域(bit field)值的读取
最近又遇到了几年前遇到的问题,标记一下. 对于跨字节位域(bit field)而言,如果数据传输前后环境的字节序不同(LE->BE,BE->LE),简单地调用(ntohs/ntohl/ht ...
- easy ui tree 取复选框打勾的值
var nodes = $('#basetree').tree('getChecked'); var cnode = ''; for ( var i = 0; i < nodes.length; ...
- php分页笔记
在做留言板的时候,用到了分页,所以写了这个分页笔记 既然已经开始写分页了,肯定掌握了了php的一些知识以及mysql的基本操作 在做分页的时候,我也遇到了很多问题,但是大家不要怕,无论什么问题 ...
- python之全栈开发——————IO模型
一:在讲IO模型之前我们首先来讲一下事件驱动模型,属于一种编程的范式,那么我们以前就是传统式编程,来看看有什么区别吧(此处为借鉴别人的) 传统的编程是如下线性模式的: 开始--->代码块A--- ...