ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:21.82KB ,
资源ID:5396140      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5396140.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据库性能测试方法讨论.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据库性能测试方法讨论.docx

1、数据库性能测试方法讨论数据库性能测试方法讨论发布时间: 2008-5-04 16:18 作者: 陈嘉祥 王治 方耀等 来源: 51Testing投稿字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 每周一问,答贴有奖 摘要:在LOADRUNNER中使用脚本和JAVA程序进行数据库性能测试。 关键词:LOADRUNNER,JAVA, Benchmark一、前言 在测试工作中经常需要对数据库进行性能测试,以对数据库进行调优,保证数据库的稳定和高效。 本文使用常用的性能测试工具LOADRUNNER,JAVA和专用数据库性能测试工具Benchmark,讨论数据库性能测试的不同方法,希

2、望能抛砖引玉,寻找出更新更好的方法。二、任务引入 数据库性能测试的需求,一般来源于下面几个方面:1、数据库调优;2、数据库选型;3、数据库服务器选型;4、其他;下面,就针对于这些常用的需求,列举几个不同的实例,共享一下测试方法。1) LOADRUNNER应用 测试任务:评估某项目的核心业务逻辑(数据查询、数据复用、抽取同步整合)在不同压力下的性能表现,判断系统瓶颈,得到最优系统配置参数和建议,并为数据库的试运行工作提供可靠的性能可行性依据; 数据查询性能指标:900个用户并发,平均响应时间在3秒以内; 数据库性能测试需求:数据库调优或服务器选型;include lrd.hAction()sta

3、tic LRD_INIT_INFO InitInfo = LRD_INIT_INFO_EYECAT;static LRD_DEFAULT_DB_VERSION DBTypeVersion = LRD_DBTYPE_NONE, LRD_DBVERSION_NONE;static void FAR * OraEnv1;static void FAR * OraSvc1;static void FAR * OraSrv1;static void FAR * OraSes1;static void FAR * OraStm1;unsigned long rownum;lrd_init(&InitInf

4、o, DBTypeVersion);lrd_initialize_db(LRD_DBTYPE_ORACLE,3, 0);lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);/连接数据库lrd_server_attach(OraSrv1, vm

5、vare_, -1, 0, 0);lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);/设定数据库密码lrd_ora8_attr_set(OraSes1, USERNAME, username, -1, 0);lrd_ora8_attr_set(OraSes1, PASSWORD, password, -1, 0);/初始化连接sessionlrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);/开始连接数据库lrd_session_begin(Ora

6、Svc1, OraSes1, 1, 0, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1, 0);/设定查询语句lrd_ora8_stmt(OraStm1, SELECT * FROM T_TASK_ALARM_TYPE WHERE TYPE_CODE=7, 1, 0, 0);/执行查询语句lrd_ora8_exec(OraSvc1, OraStm1, 0, 0,&rownum, 0, 0, 0, 0, 1);/释放连接数据库的各种变量lrd_handle_free(&OraStm1, 0);lrd_session_end(OraSvc1, O

7、raSes1, 0, 0);lrd_server_detach(OraSrv1, 0, 0);lrd_handle_free(&OraEnv1, 0);/lrd_end(0);return 0; 上面的LoadRunner脚本在Virtual User Generator调试通过后,在Controller中打开,用900个模拟用户并发测试,即可得出性能指标(LoadRunner的操作这里就不在赘述,google一下)。 从上面的例子看出,此应用比较难懂,是LoadRunner专属的方法,而且可扩展性不强。如果再遇到其他类型的数据库测试,协议将会是一个很大的问题。所以,为了容易理解,可扩展性强,

8、引出了下面的JAVA应用方法。2)JAVA应用 测试任务:测试待选的数据库的性能; 数据查询性能指标:20个用户并发,每秒执行增删改语句数不少于1000条; 数据库性能测试需求:数据库选型;import java.sql.*;import ;import ;public class testsybase String sDbDriver = com.*.*.*.*; String sConnStr = jdbc:*:*:ip_adress:port/sid; private Connection conn = null; private Statement stmt = null; Resul

9、tSet rs = null; public testsybase() try Class.forName(sDbDriver); catch ( e) testdb(): + e.getMessage(); public void executeUpdate() stmt = null; rs = null; try conn = DriverManager.getConnection(sConnStr, *, *); stmt = conn.createStatement(); Date(); int j=0; for(int i=0;i10000;i+) j=10001+i; /追加 s

10、ql=insert into tablename(*, *, *.) +values(test+i+,*,*.); /更新 /sql=update tablename set field_no=testupdate,*,*. where filed_no=+j; /删除 /sql=delete from tablename where tablename=+j; /查询 /sql=select * from tablename where tablename=+j; stmt.executeUpdate(sql); /rs=stmt.executeQuery(sql); /rs.next();

11、 Date(); /rs.close(); stmt.close(); conn.close(); Update is secuessful!); catch (SQLException ex) executeUpdate: + ex.getMessage(); public void executeSql(String sql) stmt = null; rs = null; try conn = DriverManager.getConnection(sConnStr, *, *); stmt = conn.createStatement(); rs=stmt.executeQuery(s

12、ql); rs.next(); Count is +rs.getString(1); stmt.close(); conn.close(); /OK); catch (SQLException ex) executeSql: + ex.getMessage(); public static void main(String args) testsybase mytest = new testsybase(); mytest.executeUpdate(); 上面的java代码调试通过后,可以通过注释不同的代码段,分别测试增加、修改、删除、查询的等情况的性能,并得出时长,反算出性能。 这里说明一

13、点,java代码即可以单独的打成jar包,放在服务器上运行,也可以直接在本地IDE运行。如果觉得LoadRunner专业,也可以放到LoadRunner里运行,选择Java Vuser协议,这里需要注意的是,LoadRunner运行时,需要设置好Runtime Settings中的Classpath,代码运行需要的jar包都要加到这里。提醒一点的是,笔者使用的是LoadRunner 8.0,在跑上面的代码时,使用的是Java 1.4的虚拟机,高版本如1.5就不能成功运行。 从这个例子可以看出,此种应用灵活性强,任何数据库都可以做测试,只要有提供的驱动即可,如果需要,还可以扩展其他的方法。但测试

14、人员需至少掌握一种高级编程语言,对数据库操作也必须很熟悉,要求较高,所以又引出了下面的Benchmark的应用方法。3)Benchmark应用1.引言 诚然上述的编写代码以进行数据库性能测试,对于初级测试员来说还显得有点难度,如何才能使用比较简单的方法进行测试呢?这里将会介绍Quest公司的Benchmark Factory,它以向导的方式一步步指引你开展测试,是一个很容易上手的工具。2.模型设计 假设有一个正在使用的数据库,库中有相当数量的数据,作为支撑某个系统用。每天上班时间中大概有500人次的A表写入记录,也大约有500人次的A表查询;系统的程序每天大概会往数据库的B表写进50000条记

15、录,以及5000条C表记录,还有1000条A表记录,删除500条A表记录,更新100条D表记录;然后管理员要对B表、C表及D表进行50人次查询。根据二八原则,百分之八十的工作在百分之二十的时间内完成,即上述列出的工作量,其80%将在1.6小时完成。 另外作为对比,本次测试再对该模型进行缩减处理,即在二八原则的基础上,工作量及时间都缩减为原来的10%。 最终的结果是10分钟内,对数据库进行的查询操作有40条A表查询、BCD表各4条查询;写操作有120条A表记录、4000条B表记录、400条C表记录;更新操作有8条D表记录;删除操作有40条A表记录。3.语句构建 相关的SQL语句构建如下:1、查询

16、A表select * from A2、查询B表select * from B3、查询C表select * from C4、查询D表select * from D5、写入A表insert into A (a,b,c) values (1,2,3)6、写入B表insert into B(e,f,g) values (4,5,6)7、写入C表insert into C(h,i,j) values (7,8,9)8、更新D表update D set k = $BFRand(100)9、删除A表记录delete from A WHERE ROWNUM=1注:$BFRand(100)是Benchmark

17、Factory提供的一个随即函数。4.方案建立在Benchmark Factory里面建立好ORACLE的profile后,新建一个Scenario(Create a custom load scenario)因为有多个SQL语句,所以类型选择混合(Mix)接着选择添加SQL语句 一一填写完成并根据模型设计赋予不同的权重(Weight)大约设置一下并发用户数,完成后可以看到脚本区有着新增的事务列表 在右侧窗口还可以设置每次迭代的时间与并发用户数 然后再到左边脚本区,在右键菜单中选择Submit Job,这时候Benchmark Factory就开始自动跑起来了。 5.测试结果注:红色加粗字体为

18、值得关注部分1、10分钟10个并发用户Test Run Id12StatusCompletedStart Time2008-3-25 12:31Stop Time2008-3-25 12:42Comment10min test2(10users)Sampling Time0h:9m:41sPre-Sample Time0h:0m:0sOverall Results1019.7536714.6240097Transaction Results - User Load: 10delete from A WHERE ROWNUM=158000.011update D set k = $BFRand(

19、100)12000.094select * from D551200.002select * from C414067929840.065select * from B6343960.987select * from A48429023423400.021insert into C(h,i,j) values (7,8,9)473000.024insert into B(e,f,g) values (4,5,6)4918000.021insert into A (a,b,c) values (1,2,3)137000.03可见TPS约为并发用户数,应该还有上升空间,各SQL语句执行次数比较符合

20、理想目标。用时方面就是B表查询需时较长(同时B表的行数也比较多),其他比较理想。另估计是B表的查询延迟了其他的操作,导致SQL脚本总体执行次数不算太多。2、80100个并发虚拟用户逐渐增加的5次迭代Test Run Id13StatusCompletedStart Time2008-3-25 14:02Stop Time2008-3-25 16:43Comment1h40m 80100usersName:Custom Mix Load ScenarioTest Type:Mixed Workload Database TestTest Id:9VersionOverall Results801

21、74.62190895441388423785153.74431979396086514690133.9348194269595128.85462248636100125.05446985330Transaction Results - User Load: 80delete from A WHERE ROWNUM=1753000.039update D set k = $BFRand(100)145000.015select * from D787818720.003select * from C7334381321.438select * from B7230636898112.13sel

22、ect * from A74373126220.336insert into C(h,i,j) values (7,8,9)7360000.07insert into B(e,f,g) values (4,5,6)75025000.055insert into A (a,b,c) values (1,2,3)2216000.031这里原先构想是100分钟内并发用户从80个提升到100个,但Benchmark Factory使用的是分开多次迭代来进行对比,于是便有上述图例(具体语句的执行情况只精选了80、90、100三次迭代)。 从数据中分析,在80个并发用户时,TPS还是约等于并发用户数,并且

23、在20分钟内就完成了模型中的操作量。在90个并发用户时,TPS已经大为下跌,事务处理时间大为增加,但在20至30分钟左右还是能够基本完成模型中的操作量。至100个并发用户时,TPS就相当低下,部分事务处理时间到了一个比较难以忍受的地步,使用的时间也耗费40多分钟。虽然因为到后面数据库表中的数据越来越多,但如此的性能还是需要优化。 从事务角度入手,文章开头所设计的模型大概在80个并发用户左右会遭遇瓶颈,如果并发用户数目不多,则该ORACLE数据库足够可以应付。另外B表的数据量增长得很快,进行对该表查询的事务时间亦随之呈几何级别增长,必须对该表进行索引管理以提高效率。其余两个需要经常查询的表同理。

24、6.后记 此应用是针对已经投入生产使用的ORACLE数据库,通过Benchmark Factory调用系统中常用的SQL语句来进行数据库性能测试,此乃Benchmark Factory的冰山一角也。读者不妨在阅读本文后,尝试Benchmark Factory的其他测试向导,找出Benchmark Factory的强大所在。三、小结 综合上面的3种应用,我们分析一下各自的优缺点和适用范围: LoadRunner是一种工业级的性能测试工具,也得到了业界的广泛认可,但对于数据库性能测试来说,它显得有点勉为其难,同时提供的协议支持也不多,对于初中级测试人员来说,是个很大的挑战; JAVA应用是需要自己对编码和数据库操作都比较熟悉的情况下才选择的方案,当然也可以用c和其他的开发工具,关键是能够按照自己的意愿实施性能测试。对于初中级测试人员来说,也将是个很大的挑战; Benchmark应用也是一种比较简单适用的数据库性能测试工具,它自身支持的数据库类型较多,如mysql,db2,sybase,oracle等,对于初学者来说,是个不错的选择; 纵观上面的应用,我们是从难到易找到各种方法进行测试的,目的就是要逐步提高我们的测试水平,提高测试效率,同时让不同层次的测试人员掌握数据库性能测试方法。些许经验,共享之,错漏难免,不吝赐教。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1