(原创)如何在性能测试中自动生成并获取Oracle AWR报告
版权声明:本文为原创文章,转载请先联系并标明出处
由于日常使用最多的数据库为Oracle,因此,最近又打起了Oracle的AWR报告的主意。
过去我们执行测试,都是执行开始和结束分别手动建立一个快照,然后需要这部分数据的时候再去获取AWR报告查看。
但是有的时候忙乱起来或者一个任务项交给别人来做就经常会有忘记建立快照的情况,这时候就只能通过Oracle自己默认建立的快照来获取了。但是我们知道 Oracle默认是一个小时才建立一个快照,且建立快照的时间点很难跟我们的测试过程能匹配到一起,这样我们获取的测试报告就有了很多的干扰项。
而且,有很多新来的小朋友做性能测试的时候也并不知道该怎么取报告。每次都要去教的话,不是我的风格,懒癌晚期当然是能偷懒就偷懒了。于是开始动起了歪脑经:能不能使用软件测试工具同步把AWR报告也收集过来呢,如果可以集成到脚本中,那么获取AWR报告的时候使用的始末快照就能跟我们的测试过程完全匹配了,也防止了因为疏忽忘记建立快照的情况。
可以选择的测试工具有很多,比如Loadrunner、Jmeter、HyperPacer等,仔细研究了HyperPacer提供的JDBC采样器,发现HyperPacer完全可以胜任这个需求。
对如何在性能测试中手工生成AWR报告完成数据库性能分析还不了解的同学猛戳这里了解!
于是大概梳理了一下思路:
首先:
在初始化场景内:添加JDBC采样器,分别进行两个操作:一个是通过dbms_workload_repository这个包提供的create_snapshot()建立快照,然后查询当前最大的快照号,也就是我们刚刚建立的快照,作为测试的起始快照号;
在收尾场景内:添加JDBC采样器,同样建立快照,并查询当前最大快照号,作为测试的终止快照号;再多添加一个JDBC采样器,通过包dbms_workload_repository提供的方法AWR_report_html获取两个快照间的AWR报告。
理想很美好,但是实际实现起来却发现没有那么简单。原来想当然的是在初始化场景里先获取测试开始的快照号,然后作为变量传给收尾场景的JDBC采样器。但是执行的时候一直报变量无效。
想了好久不知道是什么原因,最后忽然想明白原因了,没想到学习使用了这么长时间的HyperPacer,最后在小--(阴)--(沟)---(里)翻了船。
获取初始快照号的采样器建在初始化场景下,这也就决定了这个采样器的作用域只能在初始化场景下,我把它输出的变量传给收尾场景的采样器,超出了作用域自然就无法识别了。
汗~~~~~~~~~~
于是只好调整思路,既然无法完美实现,那么只好退而求其次,初始化场景只建立快照,获取这个快照号的采样器移到收尾场景内。于是最终实现后就是如图下面的样子:
可以看到在快照浏览器里已经取到对应本次执行过程的AWR报告。
下面给童鞋们说一下具体的实现步骤:
依赖于HyperPacer强大的功能,要实现这个自动获取AWR报告的需求,脚本里面其实只用到了两个元件来实现,配置元件里的JDBC连接配置和取样器里的JDBC请求取样器。
第一步:我们需要在工程Demo下面增加一个配置元件,JDBC连接配置,配置界面如下:
配置界面很简单,首先需要自定义一个数据源名称,因为在后面我们的JDBC取样器都会用到这个变量里定义的名称,所以尽量用识别度高且有实际含义的名称。
然后下面是选择数据库类型和填写数据源的连接信息,截图已经给出了各个图形界面输入框的含义。小伙伴们还可以选择勾上URL的复选框,然后自己把TNS文件里配置的连接信息直接简单粗暴的Copy进来。
第二步:在初始化场景里添加JDBC取样器,如下图配置:
Oracle提供的包以及包里包括的方法,可以查看Oracle官网文档,有很详细的解释
第三步:在收尾场景里添加5个JDBC取样器,分别如下:
建立结束快照号
获取DBID
获取实例NUMBER
获取开始和结束快照号
获取AWR报告正文
齐活,以调试模式运行,然后就可以在快照浏览器里,选中我们定义的获取AWR报告正文的取样器“获取AWR报告数据”,在右侧的渲染里就可以看到AWR报告了。
好了,相信大家按照这个步骤做下来应该已经学会如何使用HyperPacer自动获取AWR报告了。然—并—卵,因为我要告诉大家的是:一个好消息一个坏消息。
坏消息是:即便你取到了AWR报告,你可能根本不知道该看哪里而且也看不懂;好消息是:HyperPacer运营组后续可能会因为小伙伴们要求传授此类知识的呼声太高而不得不组织此类培训哦。
最后,作为一个有情怀的人,我必须直面HyperPacer的不完美,所以我必须要告诉大家,这个实现方案并不完美。这样的实现为什么我说不完美呢?因为,就如我们前面所说,Oracle默认情况下自己也会隔一个小时做一个快照,假设我们的测试过程耗时较长,超过了一个小时,那么,我们再去取最大的两个快照号时,实际上取到的是下图所示的红框内的统计数据。
如果我们能预先知道测试运行多长时间,我们还可以手动修改一下提取快照号的SQL(如何修改,来HyperPacer的交流群来问我啊),但是如果没办法预知测试耗时,那就没办法支持了。
还有一个不完美的地方,那就是只能在调试模式下才能看到取到的AWR报告,虽然说,我们需要AWR报告的时候大多都是在排查问题的时候,使用调试模式也无可厚非,但是,有着强迫症的我,总觉得脚本调试模式的性能损耗会把本来可以漂亮的结果拖累成一个Ugly things。以前的快照浏览器明明是一个配置元件,为什么它长大了就变成了一个功能页签。
于是,怀着无比郁闷的心情,我给HyperPacer技术组的小伙伴们又提了两个需求:
1、真心希望HyperPacer能够再增加一个全局变量配置的地方,通过对该变量读写进行跨域的参数传递。
2、运行模式也能支持特定的取样器结果输出。
提完需求,技术组的小伙伴哭着去加班去解决了,而我,美美的坐上了班车回家了。
参考文章: Oracle AWR报告指标全解析 原文出处
(原创)如何在性能测试中自动生成并获取Oracle AWR报告的更多相关文章
- 【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。
前端页面层: 编译老是不通过,报如下如所示错误: -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类. 结果整理: 1.尽管在 edmx 模 ...
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序 本贴首发于: http://xuekaiyuan.com/forum.php?mod=vie ...
- IntelliJ IDEA 中自动生成 serialVersionUID 的方法
as, idea plugin中搜如下关键字,并安装该插件: GenerateSerialVersionUID 如上图所示,创建一个类并实现Serializable接口,然后按alt+Enter键,即 ...
- 在PowerDesigner中自动生成sqlserver字段备注
在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...
- 二十四、详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法
当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是: 无法自动生成serialVersionUID. 而serialVer ...
- eclipse中自动生成注释
eclipse中自动生成注释 包前缀设置的地方 注释模板设置的地方 Eclipse自动生成方法注释 快捷键 自动生成方法的注释格式,例如 /*** @param str* @return* @thro ...
- Eclipse中自动生成get/set时携带注释给get/set
Eclipse中自动生成get/set时携带注释给get/set 编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclips ...
- 从JSON中自动生成对应的对象模型
编程的乐趣和挑战之一,就是将体力活自动化,使效率成十倍百倍的增长. 需求 做一个项目,需要返回一个很大的 JSON 串,有很多很多很多字段,有好几层嵌套.前端同学给了一个 JSON 串,需要从这个 J ...
- Oracle Awr报告_生成
AWR的概念 Oracle数据库是一个使用量很多的数据库,关于Oracle数据库的性能.Oracle10g以后,Oracle提供了一个性能检测的工具:AWR(Automatic Workload Re ...
随机推荐
- css——样式表分类,选择器
一,样式表分类 (1)内联样式[优先级最高][常用][代码重复使用性最差] (当特殊的样式需要应用到个别元素时,就可以使用内联样式. 使用内联样式的方法是在相关的标签中使用样式属性.样式属性可以包含任 ...
- supervisor安装配置
1.安装 下载:https://codeload.github.com/Supervisor/supervisor/zip/3.1.3 2.安装 .zip cd supervisor- python ...
- ThinkPHP3.2.3版本验证码异步第二次验证时失败的问题解决
最近在用TP3.2.3做一个小项目,纠结于验证码验证问题,重点在于二次验证,举个例子就是常见的登录页面上有个验证码输入框,当用户输入验证码并且鼠标点击在这个输入框之外时候,触发onblur事件,然后a ...
- 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- Azure Messaging-ServiceBus Messaging消息队列技术系列7-消息事务
上篇博文中我们介绍了Azure Messaging-ServiceBus Messaging消息回执机制. Azure Messaging-ServiceBus Messaging消息回执机制 本文中 ...
- Oracle函数整理
) from dual;--绝对值 ,) from dual;--取模,取余数 select ceil (12.1) from dual;--去上限值 select floor (12.1) from ...
- Apache Mina入门实例
一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...
- iOS StoreKit
简述: 本文讲解iOS系统框架StoreKit中的SKStoreProductViewController与SKStoreReviewController这两个Controller. SKStoreP ...
- TextField和TextView
本文概要 1.简介 2.介绍TextField控件 3.介绍TextView控件 4.键盘的打开和关闭 5.关闭和大开键盘的通知 6.键盘的种类 详情 1.简介 与Label一样,TextField和 ...
- 在ElasticSearch中使用 IK 中文分词插件
我这里集成好了一个自带IK的版本,下载即用, https://github.com/xlb378917466/elasticsearch5.2.include_IK 添加了IK插件意味着你可以使用ik ...