Oracle DB Time是Oracle数据库在时间维度上剖析性能的一个重要指标,通过逐级分解该指标,定位到浪费资源或者资源争用的首要事件上,从而通过减少等待以及最小化每个请求的使用资源来达到优化的目的。本文主要讲述Oracle DB Time,以及给出示例演示Oracle DB Time。

一、Oracle DB Time

由上图可知:

DB Time(请求时间)= DB Wait Time(DB等待时间)+ DB CPU Time(DB CPU服务时间)

上述等式中右边DB等待时间不包括后台进程上CPU开销的时间以及前台进程非空闲等待时间。

优化不仅仅是减少等待。它旨在改善最终用户的响应时间或最小化每个请求使用的平均资源。有时候这些需要一起进行调整,但在其他情况下,有权衡。例如,使用并行查询,并行查询或者并行DML则是更多的利用系统资源来达到快速完成事务或完成查询等相关业务。一般来说,可以调整的方式是减少或避免对系统资源的长时间占用或过度消耗。一旦当资源的占用减少,也就意味着资源可以服务更多的请求来达到提高吞吐量的目的。

由上图可知等待时间是所有等待各种数据库实例资源的总和。 CPU时间是实际工作在请求上花费的时间的总和。这些时间不一定由一个等待和一个CPU时间块组成。通常,进程将经历较短的DB资源等待,然后在CPU上短暂运行,并重复执行此操作。

因此优化包括减少或消除数据库资源等待时间并减少CPU时间。此定义适用于任何应用程序类型,在线事务处理(OLTP)或数据仓库(DW)。

注意:一个非常繁忙的系统显示更长的DB CPU时间,这可能会膨胀其他时间。

二、CPU和等待时间调整维度

调整系统时,将CPU时间与系统的等待时间进行比较很重要。通过比较CPU时间与等待时间,您可以确定有多少时间是花在有用的工作以及有多少时间花在等待其他进程可能持有的资源上。作为一般规则,CPU时间占优势的系统通常比等待时间占优势的系统需要更少的调整。但是,CPU使用量过大可能是由严重的SQL语句引起的。等待时间到CPU时间的比例总是趋于随着系统负载的增加而增加,等待时间的急剧增加是争用的征兆,并且必须寻求良好的可扩展性。

当等待时间的增加表明资源争用趋于严重,向节点或节点添加更多的CPU来提高性能,收效甚微。相反,随着负载增加,CPU时间的比例不会显著下降的系统可以更好地扩展,并且最有可能从添加CPU或实际应用集群(RAC)实例中受益。

注意:如果CPU时间部分是前五名事件之一,则自动工作负载存储库(AWR)和Statspack报告显示CPU时间以及前5个事件部分中的等待时间。

三、DB Time案例解读
1、AWR报告头部
--环境
SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,
2 '645746311' QQ from dual;
AUTHOR BLOG QQ
------- ---------------------------- ---------
Leshami http://blog.csdn.net/leshami 645746311
1
2
3
4
5
6

从上图可知,在自然流逝时间内,10分钟,DB层调用花费的时间为432.12分钟。也即是说是自然时间的43倍左右,数据库处于繁忙状态。

当前数据库逻辑CPU为8个,因此每CPU平均服务时间为432.12/8=54.015min

按前面DB Time的描述,DB Time = DB Wait Time + DB CPU Time 因此 54.015min需要进一步确认是否为真实的使用率。

2、Load Profile

从上图可知,
DB Time(s) 行,每一个自然时间秒,DB Time对应为43.1s,据此推算43.1*10.02*60/60 约等于头部的DB Time 432.12分钟。
DB CPU(s) 行,每一个自然时间秒,CPU的开销为0.1s,即10.02*60*0.1=60.12s,也就是说花在CPU上的时间仅仅1分钟左右。
Redo size 行,每秒产生的redo较多,符合OLTP数据库业务场景。
Executes与Transactions也表明当前的业务场景为OLTP类型。

3、首要等待事件

上图为首要等待事件,总体来说,数据库等待时间较长。
write complete waits,等待时间为15629,平均等待29322ms,占据了整个DB Time 的60.28%
将上述时间加总,总和为25593,与Load Profile计算出来的25851.6s( 43.1*10.02*60-60.12) 接近。
通过上面的计算可知当前的数据库非空闲等待较为严重。

4、主机CPU负载

上图为主机CPU负载情况。
主机CPU
在报告期间,“Load Average” begin/end值代表每个CPU的大致运行队列大小,主机负载呈现上升趋势,由1.19上升到4.86
%User + %System = 1.0 + 0.6 = 1.6 因此空闲的CPU,即%Idle为98.3%
%WIO表示CPU等待IO占比,此处为7.4%,也就是说当前的系统IO存在瓶颈。

实例CPU
%Total CPU,该实例所使用的CPU占总CPU的比例—>% of total CPU for Instance
%Busy CPU,该实例所使用的Cpu占总的被使用CPU的比例—> % of busy CPU for Instance
%DB time waiting for CPU (Resource Manager)是指当使用了resource manager限制某个用户和会话使用CPU,而产生的等待。会产生resmgr:cpu quantum等待事件,如果产生该等待事件需要和RSRC_MGR的值结合起来判断。解决方法是需要修改资源限制的plan。
以下计算结合了操作系统统计信息,数据见后面截图

% of busy CPU for Instance= (DB CPU+ background cpu time) / (BUSY_TIME /100)= (40.53 + 6.57)/ (7919/100)= 59.4%
% of Total CPU for Instance = ( DB CPU+ background cpu time)/( BUSY_TIME+IDLE_TIME/100) = (40.53 + 6.57)/ ((7,919+471,596) /100) = 0.98%
%DB time waiting for CPU (Resource Manager)= (RSRC_MGR_CPU_WAIT_TIME/100)/DB TIME

5、时间统计模型

上图为时间统计模型。
sql execute elpased time时间占主导,即时间耗用主要是在SQL执行上面。
这些SQL的执行对应得等待事件见前面的Top Event,也就是说等待和争用比较突出。
注意该时间模型中的指标存在包含关系所以存在Time Model Statistics加起来超过100%情形。

6、操作系统统计信息

以上为操作系统统计信息截图
IO等待的时间为35287厘秒

7、操作系统层面监控
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 142.00 15.00 230.00 288.00 1116.00 11.46 3.94 16.16 4.08 100.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 12.00 0.00 48.00 8.00 0.35 29.00 2.50 3.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 16.00 360.00 296.00 1068.00 7.26 4.38 11.71 2.66 100.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sdb 0.00 142.00 12.00 218.00 96.00 1060.00 10.05 3.33 13.98 4.35 100.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 14.00 360.00 160.00 1060.00 6.52 4.36 11.36 2.67 100.00
1
2
3
4
5
6
7
8
9
10
11
12
13
操作系统层面%util为100,await时间为平均服务时间svctm4倍左右,即IO存在超负荷运转,这与AWR中前台等待进程等待相呼应。

8、初步结论
1) 通过首要等待事件,以及OS层面观察,当前的主要瓶颈在IO。
2) 如未开启异步IO,可以考虑开启异步IO (OS及DB层面同时开启)
3) 优化SQL以减少过多的IO负载,同时也可以考虑优化SQL所在的包,存储过程
4) 热对象的分区以及索引分离,反向索引设计等
————————————————
版权声明:本文为CSDN博主「Leshami」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leshami/article/details/73554856

Oracle DB Time的更多相关文章

  1. 在silverlight中通过WCF连接ORACLE DB数据库(转)

    转自 http://hi.baidu.com/qianlihanse/item/458aa7c8d93d4e0cac092ff4 这不是我的原创,我也是上网学习的~ How to get data f ...

  2. Oracle DB 存储增强

    • 设置Automatic Storage Management (ASM)  快速镜像 再同步 • 使用ASM 首选镜像读取 • 了解可伸缩性和性能增强 • 设置ASM 磁盘组属性 • 使用SYSA ...

  3. goldengate 12c对oracle DB的改进

    1. 现在可使用Oracle Universal Installer,即安装时有图形化界面,同时会自动安装java runtime environment,不过个人认为,还是ZIP安装包方便,解压即用 ...

  4. Oracle DB 使用调度程序自动执行任务

    • 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...

  5. Oracle DB 管理数据库的空间

    • 描述4 KB 扇区磁盘的概念及使用 • 使用可移动表空间 • 描述可移动表空间的概念 数据库存储 数据库存储 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物 理存储 ...

  6. Oracle DB 执行表空间时间点恢复

    • 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作 • 阐释TSPITR 使用的术语的定义 • 确定适合将TSPITR 用作解决方案的情况 • 确定时间点恢复的正确目标时间 • 确定不能使 ...

  7. Oracle DB 备份和恢复的概念

    • 确定Oracle DB 中可能发生的故障类型 • 说明优化实例恢复的方法 • 说明检查点.重做日志文件和归档日志文件的重要性 • 配置快速恢复区 • 配置ARCHIVELOG模式   部分工作内容 ...

  8. 用户与 Oracle DB 交互具体过程

    与 Oracle DB 交互 以下的演示样例从最主要的层面描写叙述 Oracle DB 操作.该演示样例说明了一种 Oracle DB 配置,在该配置中,用户和关联server进程执行于通过网络连接的 ...

  9. 普通用户登录Oracle DB Control

    使用 sys 或者 system 用户登录 Oracle DB Control 是没有问题的. 但是,如果是普通的用户需要登录Oracle DB Control,建表或者视图之类的, 则需要授权 SE ...

  10. Test oracle db iops

    Today, i need to test one database's iops and do something for oracle db's io test. How to test the ...

随机推荐

  1. MyBatis—resultMap 的关联方式实现多表查询(多 对一)

    mapper 层 a)在 StudentMapper.xml 中定义多表连接查询 SQL 语句, 一次性查到需要的所有数据, 包括对应班级的信息. b)通过<resultMap>定义映射关 ...

  2. 【Springboot】Springboot整合Jasypt,让配置信息安全最优雅方便的方式

    1 简介 在上一篇文章中,介绍了Jasypt及其用法,具体细节可以查看[Java库]如何使用优秀的加密库Jasypt来保护你的敏感信息?.如此利器,用之得当,那将事半功倍.本文将介绍Springboo ...

  3. vuex模块化。

    项目结构: 1:在src下新建目录store,然后再建storemodule.js文件,把 上篇 store.js文件抽出来: import Vue from 'vue' import Vuex fr ...

  4. Orleans在.net core的开发

    Goods 服务 启动 using System; using System.Collections.Generic; using System.Linq; using System.Net; usi ...

  5. OV7670 RAW输出 bayer 解码

    今天终于搞定OV7670 raw输出啦,兴奋!! 参考链接: https://pikacode.com/liplianin/s2-liplianin/commit/dab97f5d6e3b http: ...

  6. LNMP-Nginx反向代理

    Nginx反向代理 Nginx提供反向代理的模块http proxy,这个模块是默认的,不需要重新编译模块.通常情况下,Nginx代理一般常用的环境是,提供web服务的服务器放在内网,暴露在外网上容易 ...

  7. deleteSections & deleteRows 我踩得坑

    需求背景 有这样一个需求,有一个用来展示商品的列表,你可以从别的数据源添加过来,能添加当然就能删除了,这时候就用到了UITableView/UICollextionView组或者cell的删除,但在测 ...

  8. CCPC Wannafly Winter Camp Div2 部分题解

    Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...

  9. K8S命令-Kubectl 命令大全

    参考1:https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html?h=kubectl Kubctl 命令是操作 ku ...

  10. Python之闭包and装饰器

    闭包和装饰器是Python中非常重要的一种语法格式,在日常工作中应用非常广泛. 首先,我先为大家简单的介绍一下闭包的概念. 闭包:闭包是在函数嵌套的基础上,内层函数使用到外层函数的变量,且外层函数返回 ...