背景:某个类似准实时的数据分析系统,每15分钟从其他6个数据库中抽取五百张增量数据表,并进行15分钟粒度统计,同时有个前端门户进行查询。

该数据分析系统由数据抽取服务器、应用服务器、数据库服务器组成,全部为虚拟机环境。

问题:当数据抽取定期执行时,应用门户每个页面访问都极其缓慢,10分钟无法响应,甚至无法打开。

初步诊断:厂家一直认为是磁盘问题,甚至准备采用读写分离方式优化。

具体诊断:以数据来说话,以AWR报告为依据,评估和定位问题核心所在。

很久没研究Oracle了,最后正式使用Oracle还是2011年,也想趁此机会,把Oracle复习一下。

AWR是 Oracle 10g 版本推出的新特性,全称叫Automatic Workload Repository-自动负载信息库。

AWR 是通过对比两次快 照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分。

AWR报告主要包括如下部分:

Report Summary - 报告摘要

Wait Events Statistics - 等待事件统计

SQL Statistics - SQL统计

Instance Activity Statistics - 实例活动统计

IO Stats - IO统计

Buffer Pool Statistics - 缓冲池统计

Advisory Statistics - 建议统计

Wait Statistics - 等待统计

Undo Statistics - 重做统计

Latch Statistics - 栓锁统计

Segment Statistics - 段统计

Dictionary Cache Statistics - 字典缓存统计

Library Cache Statistics - 库缓存统计信息

Memory Statistics - 内存统计

Streams Statistics - 流统计

Resource Limit Statistics - 资源配额统计

Shared Server Statistics - 共享服务统计

init.ora Parameters - init.ora参数

AWR报告的开始是Workload repository report for (负载信息库报告)

主要包括了

一、DB 名称,DB ID,实例名,实例个数,最近数据库启动时间,数据版本,是否RAC

二、主机名称、操作系统、CPU核数、内存大小

三、AWR报告执行的起止时间,会话数,每个会话的游标数

Elapsed为两次快照的时间间隔

DB Time为花在数据库运算(非后台进程)和等待(非空闲等待)上的时间

DB time = cpu time + all of nonidle wait event time。

数据库负载率=DB time/Cores/Elapsed=1955.68/24/119.70=68.08%,说明数据库还是比较忙的。

关于报告摘要部分,第一节是负载概况

这两部分是数据库资源负载的一个明细列表,分割成每秒钟的资源负载和每个事务的资源负载情况,性能指标的含义如下:

redo size: 每秒/每个事务 产生的redo量 (单位字节)

logical reads: 每秒/每个事务 产生的逻辑读的块数

block changes: 每秒/每个事务 改变的数据块数

physical reads: 每秒/每个事务 产生的物理读

physical writes: 每秒/每个事务 产生的物理写的块数

user calls: 每秒/每个事务 用户的调用次数

parses: 每秒/每个事务 分析次数

hard parses: 每秒/每个事务 硬分析次数

sorts: 每秒/每个事务 排序次数

logons: 每秒/每个事务 登录数据库次数

executes: 每秒/每个事务 SQL的执行次数

rollbacks: 每秒/每个事物回滚次数

transactions: 每秒的事务数

大体可以看出,物理读每秒763M左右,逻辑读每秒2.7G,执行语句12次/秒,业务繁忙程度一般,主要是读数据为主。也就是说磁盘读写不是造成性能问题的根本原因。

Instance Efficiency Percentages为实例命中率

Buffer Nowait %表示在内存获得数据的未等待比例。在缓冲区中获取Buffer的未等待比率。Buffer Nowait的这个值一般需要大于99%。否则可能存在争用,可以在后面的等待事件中进一步确认。

Buffer Hit %表示进程从内存中找到数据快的比率,监视这个值是否发生重大变化比这个值本身更重要。根据Oracle的经验,对于OLTP系统,Buffer Hit Ratio理想应该在95%以上。小于90%要增加db_cache_size。命中率很高,不一定代表系统性能最优,比如大量非选择性的索引被频繁访问, 会导致命中率很高的假象(db_file_sequential_read)。命中率突然增大可以检查top buffer get SQL,查看大量逻辑读的语句和索引;命中率突然减小,可以检查top physical_reads SQL,查看大量物理读的语句,主要是那些没有使用索引或索引被删。--编者按,数据库中确实存在大量非选择性的索引,几乎每个表都有。

library hit%表示Oracle从Library Cache中检索到一个解析过的SQL或PL/SQL语句的比率,当应用程序调用SQL或存储过程时,Oracle检查Library Cache确定是否存在解析过的版本,如果存在,Oracle立即执行语句;如果不存在,Oracle解析此语句,并在Library Cache中为它分配共享SQL区。低的library hit ratio会导致过多的解析,增加CPU消耗,降低性能。如果library hit ratio低于90%,可能需要调大shared pool区。STATEMENT在共享区的命中率,通常应该保持在95%以上,否则需要要考虑:加大共享池;使用绑定变量;修改cursor_sharing等参数。 --编者按,简而言之就是SQL软解析命中率;数据库中也存在不少的写死的SQL语句或拼接的SQL语句。

Execute to Parse %:是语句执行与分析的比例,如果要SQL重用率高,则这个比例会很高。该值越高表示一次解析后被重复执行的次数越多。计算公式为:Execute to Parse =100 * (1 - Parses/Executions)。所以如果系统Parses > Executions,就可能出现该比率小于0的情况。该值<0通常说明shared pool设置或者语句效率存在问题,造成反复解析,reparse可能较严重,或者是可能同snapshot有关,通常说明数据库性能存在问题。--编者按,本例中这个值比较低3%,说明SQL重用率很低。

Parse CPU to Parse Elapsd%:SQL总体解析时间包括CPU时间和wait时间,是指sql语句的CPU时间与总体解析时间的比率,解析实际运行时间/(解析实际运行时间+解析中等待资源时间),越高越好。计算公式为:Parse CPU to Parse Elapsd %= 100*(parse time cpu / parse time elapsed)。即:解析实际运行时间/(解析实际运行时间+解析中等待资源时间)。如果该比率为100%,意味着CPU等待时间为0,没有任何等待;这个比率过低说明SQL Parse的wait时间远远大于CPU的 Parse时间不是很正常,可能有大量lib cache latch or shared pool latch 。--编者按,本例中这个值比较低0.44%,说明CPU等待情况极为严重,lib cache latch一般是由于SQL未使用绑定变量导致无法共享产生的硬解析,shared pool latch一般是共享池不够大导致的。

通过v$SQL视图查询未绑定变量的SQL语句

select *

from (select plan_hash_value, count(distinct(hash_value)), sum(executions),sum(parse_calls)

from v$sql

group by plan_hash_value

having count(distinct(hash_value)) > 10

order by 2 desc)

where rownum<21;

select sql_text from v$sql where plan_hash_value=? and rownum<10;

Redo NoWait %表示在LOG缓冲区获得BUFFER的未等待比例。如果太低(可参考90%阀值),考虑增加LOG BUFFER。当redo buffer达到1M时,就需要写到redo log文件,所以一般当redo buffer设置超过1M,不太可能存在等待buffer空间分配的情况。当前,一般设置为2M的redo buffer,对于内存总量来说,应该不是一个太大的值。

In-memory Sort%:在内存中排序的比率,如果过低说明有大量的排序在临时表空间中进行。考虑调大PGA(10g)。如果低于95%,可以通过适当调大初始化参数PGA_AGGREGATE_TARGET或者SORT_AREA_SIZE来解决,注意这两个参数设置作用的范围时不同的,SORT_AREA_SIZE是针对每个session设置的,PGA_AGGREGATE_TARGET则时针对所有的sesion的。

Soft Parse%:软解析的百分比(softs/softs+hards),近似当作sql在共享区的命中率,太低则需要调整应用使用绑定变量。sql在共享区的命中率,小于<95%,需要考虑绑定,如果低于80%,那么就可以认为sql基本没有被重用。

Latch Hit:Latch是一种保护内存结构的锁,可以认为是SERVER进程获取访问内存数据结构的许可。要确保Latch Hit>99%,否则意味着Shared Pool latch争用,可能由于未共享的SQL,或者Library Cache太小,可使用绑定变更或调大Shared Pool解决。要确保>99%,否则存在严重的性能问题。当该值出现问题的时候,我们可以借助后面的等待时间和latch分析来查找解决问题。

Non-Parse CPU :SQL实际运行时间/(SQL实际运行时间+SQL解析时间),太低表示解析消耗时间过多。计算公式为:% Non-Parse CPU

=round(100*1-PARSE_CPU/TOT_CPU),2)。如果这个值比较小,表示解析消耗的CPU时间过多。与PARSE_CPU相比,如果TOT_CPU很高,这个比值将接近100%,这是很好的,说明计算机执行的大部分工作是执行查询的工作,而不是分析查询的工作。

手工收集awr报告_一个Oracle小白的AWR报告分析(一)相关推荐

  1. oracle awr监控报告,一个Oracle小白的AWR报告分析(一)

    背景:某个类似准实时的数据分析系统,每15分钟从其他6个数据库中抽取五百张增量数据表,并进行15分钟粒度统计,同时有个前端门户进行查询. 该数据分析系统由数据抽取服务器.应用服务器.数据库服务器组成, ...

  2. oracle怎么出出awr报告,如何在Oracle中生成AWR报告

    在本文中,我将介绍一些在Oracle中为不同目的生成AWR报告的方法.DBA应该知道可以生成两种类型的AWR报告.一种是单实例报告,另一种是群集数据库报告. 什么是自动工作量存储库(AWR)?AWR是 ...

  3. java与orical链接_一个Oracle数据库链接的JavaBean实例

    一个Oracle数据库链接的JavaBean实例 public class OracleConnectionManager { private DBConnectionManager connMgr; ...

  4. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...

    文瑞承接可行性研究报告.项目建议书.立项报告.资金申请报告.项目申请报告.项目实施方案.节能报告.评估报告.商业计划书.投标书等各类文案以及各行业甲.乙.丙级工程资质.晋江市撰写节能评估报告的报告机构 ...

  5. swot分析法案例_新媒体小白如何上手案例分析(SWOT分析法)

    新媒体小白如何上手案例分析(SWOT分析法) 写在前面的话 参与ONE线上实习.担任ONE两期助理运营官以及微博上看到一些小伙伴们对案例分析一头雾水,我准备开启一个全新栏目--<新媒体小白如何上 ...

  6. python爬虫接单经历_一个Python小白5个小时爬虫经历

    环境搭建 既然用python,那么自然少不了语言环境.于是乎到官网下载了3.5版本的.安装完之后,随机选择了一个编辑器叫PyCharm,话说python编辑器还真挺多的.由于本人是小白,所以安装事项不 ...

  7. 抽取样本java实验报告_一个自定义classloader的函数抽取壳样本

    原标题:一个自定义classloader的函数抽取壳样本 本文为看雪论坛文章 看雪论坛作者ID:lemn 本文为 看雪安卓高研2w班(7月班)优秀学员作品. 下面先让我们来看看学员的学习心得吧! 学员 ...

  8. php登录控制实验报告_一个php实现用户登录的实例代码

    了解如何创建一个简单的登录系统,php + mysql的脚本,这个教程代码很容易实现,教你一步一步实现. 在本教程中,我们创建3个PHP文件来测试我们的代码. 1 main_login.php 2 c ...

  9. 天猫精灵 python 控制_一个让小白也能让HomeAssistant接到天猫精灵的组件

    [简介] 通过使用此组件可以实现用语音让天猫精灵控制家里已经连上HA的硬件. 本组件不会上传用户所绑定天猫精灵的手机号和密码到服务器上, 而是将其通过SHA1哈希算法生成token来与阿里平台交互, ...

最新文章

  1. laravel 是怎么做到运行 composer dump-autoload 不清空 classmap 映射关系的呢?
  2. Aspose.Words提示The document appears to be corrupted and cannot be loaded.
  3. Linu解决oracle连接不稳定
  4. cannot find any entry in order attachment link
  5. C++实践参考——数组类运算的实现
  6. mysql数据库建立的数据库在哪个文件夹?
  7. linux vim 到底,真的有(很多)linux大牛用vim写项目吗?
  8. JS 取当前日期、时间的代码
  9. SBuild 0.2.0 发布,基于 Scala 的构建系统
  10. windows 防火墙疑难解答程序_Win8系统设置允许程序通过防火墙的方法
  11. 染色(方法:要统计每个数出现的次数,而这个数很大,用数组存不了,怎么弄?)
  12. RobotStudio关于Ctrl+鼠标左键拖动速度慢的解决方法
  13. 精读《手写 SQL 编译器 - 回溯》 1
  14. 国民经济行业代码与投入产出表IO2002年行业代码
  15. linux系统 打开网页,使用Linux终端浏览网页
  16. oracle用命令导入dmp,Oracle导出导入dmp文件(exp.imp命令行)
  17. 扶蕾wlt~学习计划——MATLATB
  18. C语言中itoa和atoi函数的用法
  19. 采集服务器维护,采集服务器
  20. 小孔成像总结_干货 | 初中物理解题技巧+方法总结,非常实用,初二初三都要看!...

热门文章

  1. js 设置password placeholder样式_150+ 个优质的 Node.js 包和资源
  2. Git push大文件失败的处理
  3. 一个简单的MPI+C语言编程实例
  4. linux驱动头文件说明
  5. Python组合数据类型:容器类型总览,(不)可变数据类型immutable、(不)可迭代对象iterable、迭代器iterator、生成器generator、语法糖
  6. java 序列化 兼容_Java序列化 – java.io.InvalidClassException本地类不兼容
  7. Flink的累加器和广播变量、广播流、分布式缓存
  8. springboot细节挖掘(jar和war打包)
  9. 传统socket的编程实现
  10. php查看音频属性,PHP获取音频mp3文件时长或音频文件其它参数属性