原文地址:http://www.cnblogs.com/crystal-guoguo/p/4213458.html

简介:
在oracle数据库中,有两个非常实用的自带监控工具EM(Enterprise Manager)和AWR(Automatic Workload Repository)。其中,通过AWR报告可以生成易于阅读的监控报告,可协助进行性能问题的诊断和分析。
本期将介绍一些AWR报告的基本使用和在性能问题诊断中的应用。
 什么是AWR:
      从oracle 10g开始,使用名为GATHER_STATS_JOB的计划任务来收集AWR的统计数据,AWR报告中收集了许多不同的统计数据,包括等待事件、各种系统级和会话级的统计数据及使用较多资源的SQL语句相关的信息。
    在默认情况下,Oracle数据库后台进程会以一定间隔(一小时)收集系统当前状态镜像,并且保存在数据库中,默认的保留时间是8天,此策略可根据实际情况进行调整。在特殊的时间点,如测试执行前后,可以通过手动创建快照的方式来增加快照。在生成AWR报告时,通过快照点来选择生成指定时间段的统计报告。
 AWR的生成:
一、手动产生AWR报告
1)在Oracle数据库服务器上,用SYSDBA身份登入sqlplus。
2)运行脚本
在sqlplus中输入awrrpt执行命令。
@?/rdbms/admin/awrrpt.sql
3)输入报告参数
a) 选择要生成AWR报告的类型,可选择text类型和html类型,输入html(默认)。
b)报告涉及天数范围
选择要生成报告的日期是多少天的记录。输入天数后,(输入1,则表示要生成今天0点开始到目前的时间段内的报告;输入2,则表示要生成昨天0点开始到现在的时间段内的报告;以此类推。)界面显示出改时间段的数据表格,每个时间点对应一个snap id,间隔时间oracle默认为1小时。 
c)输入要生成报告的开始和结束snap编号。 
d)确定报告名称。
不输入直接回车,系统会自动生成一个默认名字的报告。
e)生成报告。
提示报告输出结束后,AWR报告存放在指定目录(用sqlplus登录oracle数据库的目录)下 。 
案例分析:
现象:
 某交易单场景,发现数据库CPU平均使用率达近90%。本案例数据库为12Core,从Instance CPU上看,oracle占用的CPU占服务器中CPU资源(89.9%)的99.5%。

分析过程:
    为了定位数据库CPU过高的问题,测试过程中使用AWR报告,观察数据库的使用情况:
1)先整体查看报告头信息(header)和性能指标(Buffer Nowait,Buffer Hit,Library Hit,Execute to Parse,Parse CPU to Parse Elapsd,Redo NoWait )。
2)看Time Model Statistics,在整个sql执行时间(sql execute elapsed time)时间为15499秒中,解析时间(parse time elapsed)用了26秒,硬解析时间(hard parse elapsed time)用了26 秒,可知解析时间是花的很少的,所以可以判断出,sql的解析没有成为性能瓶颈,进一步推测,sql在获取数据的过程中遇到了瓶颈。
4)关注下负载的概要信息。数据库层面的TPS仅为1.3,TPS较低。
5)进一步分析发现,从SQL ordered by CPU Time来看,SQL id 为cjnzff37c9gr3和cq32agu0qkpd8的SQL语句,执行次数多,耗CPU较高。
6)针对这2个SQL语句,执行命令,获取sql 执行计划。(需输入SQL id)
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
7)通过查看执行计划,对CTR_LOAN_CONT的表读取占用的cost较多,需要根据索引读取196000行数据。其中CTR_LOAN_CONT表为1200多万条数据,占用空间5888m,统计更新也较准确。部分计划如下:

8)查看 Segments by Logical Reads,96%的逻辑读都为CTR_LOAN_CONT 表的读取。最终定位为,数据库CPU过高为SQL导致。
 
处理方法:
(1)转移数据库服务器的一部分逻辑处理到应用服务器。即将数据库中的一些通过SQL判断的逻辑通过应用代码进行实现,从而适当的降低数据库服务器的复杂计算。
(2)针对XX模块仍然采用视图,但在视图中添加第三方平台作为条件过滤,并将归并方法UNION(表链接后筛选掉重复的记录再排序)改为UNION ALL(无排序去重)。
调优后效果:
(1)CTR_LOAN_CONT的表读取占用的cost从15359降低到276。
(2)数据库服务器的CPU平均使用率从89.9%降低到11.6%。

借助AWR报告分析解决oracleCPU过高的问题的更多相关文章

  1. 借助AWR报告分析解决oracleCPU过高的问题(转)

    原文地址:http://www.cnblogs.com/crystal-guoguo/p/4213458.html 简介:在oracle数据库中,有两个非常实用的自带监控工具EM(Enterprise ...

  2. [原创-性能调优]借助AWR报告分析解决oracleCPU过高的问题

    简介:在oracle数据库中,有两个非常实用的自带监控工具EM(Enterprise Manager)和AWR(Automatic Workload Repository).其中,通过AWR报告可以生 ...

  3. AWR报告分析

    AWR报告分析 awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体 ...

  4. AWR报告分析案例及命令(收集)

    AWR报告分析案例(收集) 循序渐进解读Oracle AWR性能分析报告 AWR报告分析之一:高 DB CPU 消耗的性能根源 生成AWR报告命令: 1)连接数据库:sqlplus / as sysd ...

  5. Oracle的AWR报告分析

    * 定义:awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体检报告 ...

  6. AWR报告分析解读

    http://blog.csdn.net/weiwangsisoftstone/article/details/7614430 1.AWR报告头信息 DB Name :数据库名字 DBid: 数据库i ...

  7. 理论实践:循序渐进理解AWR细致入微分析性能报告

    1. AWR 概述 Automatic Workload Repository(AWR) 是10g引入的一个重要组件.在里面存贮着近期一段时间内(默认是7天)数据库活动状态的详细信息. AWR 报告是 ...

  8. Oracle AWR报告生成和性能分析

    目录 一.AWE报告生成步骤 1.1 工具选择 1.2 自动创建快照 1.3 手工创建快照 1.4 生成AWR报告 二.AWR报告分析 2.1 AWR之DB Time 2.2 AWR之load_pro ...

  9. ORACLE调优深入理解AWR报告(转)

    AWR报告分析可从以下几点入手: (1).Oacle主机资源开销分析及负载情况 (2).oracle top信息分析 Top 10 Foreground Events by Total Wait Ti ...

随机推荐

  1. 线程优先级_priority

    线程优先级_priority Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行 线程的优先级用数字表示,范围从1~10 Thread. ...

  2. elsa-core——1.Hello World:Console

    github上有一个开源的工作流项目elsa,elsa-core是core语言的版本,其文档因为是英文,因此会让很多人不想看,或者是看不下去,从这篇文章开始我将开始对elsa-core的文档翻译成英文 ...

  3. 01 CTF从0到。。。。

    无意间在前段时间接触到了CTF,感觉很有意思,就参加了个单位的短期培训,并且参加了比赛,也是无意混进了决赛.感觉自己不会的还很多!SO,开始写博客开始刷题,自己很菜,不会C,不会Python,不会汇编 ...

  4. HTML重点总结

    HTML基础 1. 标题 HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的. <h1>这是一个标题</h1> <h2&g ...

  5. 适配Android10 拍照,相册,裁剪,上传图片

    这篇文章主要介绍了适配Android 10(Q)后,调用系统拍照,系统相册,系统裁剪和上传问题,这是一个很常用的功能,但是在Android 6.0,Android 7.0和Android 10.0以上 ...

  6. Spring Boot 项目集成Redis

    目录 集成方式 使用Jedis 使用spring-data-redis Redis的安装 绑定配置 获取Redis客户端 Redis工具的编写 使用 集成方式 使用Jedis Jedis是Redis官 ...

  7. mysql使用 分区表使用,常用sql

    mysql使用 分区表使用,常用sql 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/84839478未经博主允许不得转载 ...

  8. 异步编程async体会

    namespace 异步编程{ class Program { static void Main(string[] args) { Console.WriteLine("mian this ...

  9. CentOS8安装jdk1.8

    安装方法 CentOS8上使用 yum 直接安装,环境变量自动配置好 查看是否已安装 看到下面结果,说明已经安装配置 jdk [root@iZ2ze8crquorxf6c7l0eluZ ~]# jav ...

  10. Python的dict

    dict把key和value关联起来,可以通过 key来查找 value. 花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可.最后一个 key: value 的逗号可以 ...