测试基准数据的准备

简介: 在很多时候我们都需要做一些对比测试,比如我们的机器换了一个平台,比如机器做了较大的硬件升级和改造,或者引入了第三方的软件服务等等,很多时候就需要做一个基准测试,想根据测试结果然后对比做了一些变更之后,性能是提升了还是下降了,或者提升了,提升幅度有多少,这个单纯来估算一个值既不科学也不准确。
在很多时候我们都需要做一些对比测试,比如我们的机器换了一个平台,比如机器做了较大的硬件升级和改造,或者引入了第三方的软件服务等等,很多时候就需要做一个基准测试,想根据测试结果然后对比做了一些变更之后,性能是提升了还是下降了,或者提升了,提升幅度有多少,这个单纯来估算一个值既不科学也不准确。这个时候还是想做一个基准测试,来得到一个数据报告,让数据来说话。
当然绝大多数的时候,如果想做这样一个测试,出发点是好的,但是说实话,落实起来真是难上加难,一来要推动业务部门配合,来从前端发起相应的数据处理请求,来进行基本真实的模拟场景,或者说根据以往的经验来通过第三方的工具来实现,类似于压力测试的方式。这样也可以模拟出一个业务高峰来。
上面的两种方法都是目前主要采用的一些方法,如果从系统的角度来看,从DBA的工作量来看,都需要做很多的前期工作,比如我们要模拟业务高峰期的情况,总得有数据吧。很多时候都是从生产环境中去抽取,然后加上开发部门的配合,可能有些job,damon都有一定的环境依赖,可能需要调整一些参数等等。如果是压力测试这种方式,如果让专门的性能测试团队来做,对于他们来说,一个前提就是对于业务很熟悉,要不很难短时间模拟出很多有效的数据来。然后把这些数据和业务流程结合起来。
上面两种方式都可以实现,都需要熟悉业务和需求。
如果我们把这个工作解耦,交给第三方的独立结构来做,那么上面两种方式就彻底不可用了。
第三方测试可能更具有说服力,完全都是依照数据来说话,没有半点含糊或者水分的东西。比如我们确实需要这么做,不过一个最重要的顾虑就是数据的安全性,我们不希望把自己的所有系统都完全暴露给第三方,我们还是需要保留一些东西的。所以第三方的测试有优点但是有顾虑。怎么去合理把握这个度呢。
比如我们有10套应用系统对应10个独立的数据库实例,那么我们想把他们做一个整合,然后想看看硬件升级之后是否在性能上能够提升。
这个时候我们可以按照下面的思路来考虑。我们可以根据讨论来初步决定一个数据的基准范围,比如我们得到了近两个星期的数据负载信息,然后我们就运用这个数据库级的负载信息来做分析,比如我们抓取几个有代表性的时间段,比如在负载高峰时段+几个业务正常时间段,然后得到对应的awr报告。
通过这些报告我们就能够基本得到一些基础数据,比如在高峰时段,tps是多少,事务的大小,都能够做到心中有数。
比如一个awr报告是这样的。

Load Profile

Per Second Per Transaction
Redo size: 247,989.92 1,042.04
Logical reads: 25,633.20 107.71
Block changes: 1,861.72 7.82
Physical reads: 28.45 0.12
Physical writes: 128.67 0.54
User calls: 1,346.26 5.66
Parses: 521.36 2.19
Hard parses: 0.10 0.00
Sorts: 33.26 0.14
Logons: 0.26 0.00
Executes: 851.94 3.58
Transactions: 237.99  

我们就可以清楚的看到tps在238左右。每个事务的大小在1k左右。每秒钟的数据调用次数在1000多
然后我们进行筛选,根据这些数据得到一个整体的概念,然后在awr中尝试抓取一些典型的sql语句,比如某些sql语句执行频率特别高,哪些sql占用的IO资源特别高等。
根据这个我们就可以基本得到一个sql清单,比如sql控制在20个以内, 20条sql语句是我们需要关注的,可以列入基准范围内,
然后根据sql来得到访问的表,这样既进一步来分析表的数据情况,比如涉及的表有10个,3个大表数据在亿级,3个中级表,数据量在百万,3个小表数据量在几千
我们得到了这些数据情况,就可以进一步来提供种子数据,比如我们拿出表中的几条数据来作为种子数据,然后提供一个基准,比如那些字段的值需要唯一,那些字段的值是枚举类型的,选择的值需要在一定的范围之内,或者说哪些表有特定关联关系等等。
比如可以提供如下的数据方式

TEST_DATA

 

 

列名

种子数据1

种子数据2

 CID    

7

8

 CN     

xxxxxxx@aaaaa.com

xxxxxxx@bbbbb.com

 CN_TYPE

1

3

 UIN    

xxxxxxx001

xxxxxx002

 ENABLED

Y

N


然后我们可以提供数据的翻倍规则,比如表test_data数据量有1000万,我们就可以根据翻倍规则得到数据应该怎样去扩展,那些值的范围是有效的。

TEST_DATA

 

 

列名

基本约束

翻倍规则

 CID    

NOT NULL NUMBER(16)  

唯一

 CN     

NOT NULL VARCHAR2(50)

唯一

 CN_TYPE

NOT NULL NUMBER(5)   

1-1000

 UIN    

NOT NULL NUMBER(16)  

唯一

 ENABLED

NOT NULL CHAR(1)     

Y/N


然后在此基础上我们需要提供一些性能指标,比如某些sql语句在10分钟内执行频率在100万次。那么我们就可以提供这些数据来尝试模拟这种情况。多条sql有采用这样的方式就可以得到一个基本的概览图,然后结合事务做一个评估,那些语句放入在一个事务内,最大事务包含多少sql语句等等。
最后提供一个基准数据,比如下面的这种方式。

sql1:

100~150万次

sql2:

100

sql3:

100~150万次

sql4:

100~150万次

sql5:

100~150万次

最后提出我们的期望,这样基础数据的提供就有了一些依据,而不是根据自己的感觉来做了。尽管在评估中还是有一些误差甚至大的差别但是很多时候我们能够把一些重要的指标给过滤出来,集中分析。

目录
相关文章
|
29天前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
20 1
|
29天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
24 1
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
|
2月前
|
计算机视觉
Google Earth Engine(GEE)——使用MODIS数据单点测试SG滤波和harmonics method 滤波的差异分析
Google Earth Engine(GEE)——使用MODIS数据单点测试SG滤波和harmonics method 滤波的差异分析
46 0
|
3月前
|
SQL 存储 数据库连接
自动生成测试数据—数据库篇
自动生成测试数据—数据库篇
|
16天前
|
人工智能 分布式计算 Kubernetes
人工智能,应该如何测试?(三)数据构造与性能测试篇
本文探讨了人工智能场景中的性能测试,区别于传统互联网测试,其复杂性更高。主要关注点包括两类AI产品——业务类和平台类,后者涉及AI全生命周期,测试难度更大。测试重点是模型训练的性能,特别是数据模拟。需要构造大量结构化数据,如不同规模、分布、分片和特征规模的数据,以评估算法效率。此外,还涉及模拟设备规模(如视频流)和节点规模(边缘计算),以测试在大规模负载下的系统性能。文中提到了使用工具如Spark、ffmpeg、流媒体服务器和Kubernetes(K8S)的扩展项目,如Kubemark,来模拟大规模环境。最后,文章介绍了使用Golang进行异步IO操作以构建海量小文件,优化IO性能。
31 0
|
1月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
31 3
|
2月前
|
存储 人工智能 自然语言处理
选择最适合数据的嵌入模型:OpenAI 和开源多语言嵌入的对比测试
OpenAI最近发布了他们的新一代嵌入模型*embedding v3*,他们将其描述为性能最好的嵌入模型,具有更高的多语言性能。这些模型分为两类:较小的称为text- embeddings -3-small,较大且功能更强大的称为text- embeddings -3-large。
87 0
|
2月前
|
JSON 测试技术 API
一个数据驱动的API测试框架
一个数据驱动的API测试框架