版权声明:本文为原创文章,转载请先联系并标明出处

由于日常使用最多的数据库为Oracle,因此,最近又打起了Oracle的AWR报告的主意。

过去我们执行测试,都是执行开始和结束分别手动建立一个快照,然后需要这部分数据的时候再去获取AWR报告查看。

但是有的时候忙乱起来或者一个任务项交给别人来做就经常会有忘记建立快照的情况,这时候就只能通过Oracle自己默认建立的快照来获取了。但是我们知道 Oracle默认是一个小时才建立一个快照,且建立快照的时间点很难跟我们的测试过程能匹配到一起,这样我们获取的测试报告就有了很多的干扰项。

而且,有很多新来的小朋友做性能测试的时候也并不知道该怎么取报告。每次都要去教的话,不是我的风格,懒癌晚期当然是能偷懒就偷懒了。于是开始动起了歪脑经:能不能使用软件测试工具同步把AWR报告也收集过来呢,如果可以集成到脚本中,那么获取AWR报告的时候使用的始末快照就能跟我们的测试过程完全匹配了,也防止了因为疏忽忘记建立快照的情况。

可以选择的测试工具有很多,比如Loadrunner、JmeterHyperPacer等,仔细研究了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报告的更多相关文章

  1. 【原创】有关Silverlight中自动生成的类中 没有WCF层edmx模型新加入的对象 原因分析。

      前端页面层:    编译老是不通过,报如下如所示错误:     -- 然后下意识的查了下 生成的cs文件,没有搜到根据edmx 生成的 对应的类.       结果整理: 1.尽管在 edmx 模 ...

  2. 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序

    在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序 本贴首发于: http://xuekaiyuan.com/forum.php?mod=vie ...

  3. IntelliJ IDEA 中自动生成 serialVersionUID 的方法

    as, idea plugin中搜如下关键字,并安装该插件: GenerateSerialVersionUID 如上图所示,创建一个类并实现Serializable接口,然后按alt+Enter键,即 ...

  4. 在PowerDesigner中自动生成sqlserver字段备注

    在PowerDesigner中自动生成sqlserver字段备注 PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生 ...

  5. 二十四、详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法

    当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是: 无法自动生成serialVersionUID. 而serialVer ...

  6. eclipse中自动生成注释

    eclipse中自动生成注释 包前缀设置的地方 注释模板设置的地方 Eclipse自动生成方法注释 快捷键 自动生成方法的注释格式,例如 /*** @param str* @return* @thro ...

  7. Eclipse中自动生成get/set时携带注释给get/set

    Eclipse中自动生成get/set时携带注释给get/set   编码的时候通常要用到 JavaBean ,而在我们经常把注释写在字段上面,但生成的Get/Set方法不会生成,通过修改Eclips ...

  8. 从JSON中自动生成对应的对象模型

    编程的乐趣和挑战之一,就是将体力活自动化,使效率成十倍百倍的增长. 需求 做一个项目,需要返回一个很大的 JSON 串,有很多很多很多字段,有好几层嵌套.前端同学给了一个 JSON 串,需要从这个 J ...

  9. Oracle Awr报告_生成

    AWR的概念 Oracle数据库是一个使用量很多的数据库,关于Oracle数据库的性能.Oracle10g以后,Oracle提供了一个性能检测的工具:AWR(Automatic Workload Re ...

随机推荐

  1. Javascript动态创建 style 节点

    有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件.如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时. 静态外部 css 文件语法: @import ...

  2. Linux之kill,pkill,killall命令

    kill,pkill,killall这些命令都是用来杀死进程的 查找进程的方法: ps -ef|grep pidof 进程名 ps命令 http://www.cnblogs.com/along1226 ...

  3. Linux之uniq命令

    uniq - report or omit repeated lines  省去重复的行 参数: -i  忽略大小写字符的不同 -c  对重复的行进行记数 注意:uniq命令只会对相邻的重复的行进行去 ...

  4. python如何保证输入键入数字

    要求:python写一个要求用户输入数字,如果不是数字就一直循环要求输入,直到输入数字为止的代码 错误打开方式: while True: ten=input('Enter a number:') if ...

  5. dev机上数据库中批量生成table

    我的低效方法: 通过本地php脚本进行create: <?php //0-63 header("Content-type:text/html;charset=utf-8"); ...

  6. linux—粘滞位的设置

    粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...

  7. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  8. 免费SSL证书PK付费SSL证书 花落谁家

    3月17日和18日,Google Chrome 57.0.2987.110与Mozilla Firefox 52.0.1分别上线,而这两款浏览器都出现了一个共同点:打压HTTP协议.在Firefox ...

  9. 一步步教你使用rem适配不同屏幕的移动设备

    1.先说说几个前端常用的几个单位的概论: 1.px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch ...

  10. vuejs模板使用方法

    vuejs的模板功能很强大,下面是一些demo <!DOCTYPE html> <html lang="en"> <head> <meta ...