版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库性能测试方法讨论发布时间:2008-5-04 16:18作者:陈嘉祥 王治 方耀等 来源:51Testing 投稿字体:小 中 大|上一篇下一篇|打印 |我要投稿|每周一问,答贴有奖摘要:在LOADRUNNER使用脚本和 JAVA程序进行数据库性能测试。关键词:LOADRUNNERAVA, Benchmark 一、 前言在测试工生中经常需要对数据库进行性能测试,以对数据库进行调优,保 证数据库的稳定和高效。本文使用常用的性能测试工具 LOADRUNNE RAVA和专用数据库性能测试工 具Benchmark,讨论数据库性能测试的不同方法, 希望能抛砖引玉,寻找出更新更好的方法。 二、任务引
2、入数据库性能测试的需求,一般来源于下面几个方面:1、 数据库调优;2、 数据库选型;3、 数据库服务器选型;4、 其他;下面,就针对于这些常用的需求,列举几个不同的实例,共享一下测试方法。1) LOADRUNNER 用测试任务:评估某项目的核心业务逻辑(数据查询、数据复用、抽取同步整合)在不同压力下的性能表现,判断系统瓶颈,得到最优系统配置参数和建议,并为数据库的试运行工作提供可靠的性能可行性依据;数据查询性能指标:900个用户并发,平均响应时间在3秒以内;数据库性能测试需求:数据库调优或服务器选型;include "Ird.h"Action() static LRD_IN
3、IT_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 longrownum;lrd_init(&InitInfo, DBTypeV
4、ersion);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,
5、"vmvare_7", -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
6、, OraSes1, 0, 0);/开始连接数据库lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1,0);/设定查询语句lrd_ora8_stmt(OraStm1, "SELECT * FROM T_TASK_ALARM_TYPE WHTYPE_CODE=7”, 1,0, 0);/执行查询语句lrd_ora8_exec(OraSvc1, OraStm1,0, 0,&rownum, 0, 0, 0, 0, 1);/释放连接数据库的各种变量l
7、rd_handle_free(&OraStm1,0);lrd_session_end(OraSvc1, OraSes1, 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 一下)。从上面的例子看出, 此应用比较难懂, 是LoadRu
8、nner专属的方法,而且可 扩展性不强。如果再遇到 其他类型的数据库测试, 协议将会是一个很大的问题。所以, 为了 容易理解,可扩展性强,引出了下面的 JAVA应用方法。2) JAVA应用测试任务:测试待选的数据库的性能;数据查询性能指标:20 个用户并发,每秒执行增删改语句数不少于1000条;数据库性能测试需求:数据库选型; import java.sql.*;import java.util.Date;import java.util.Properties;public class testsybase String sDbDriver = "com.*.*.*.*"S
9、tring sConnStr = "jdbc:*:*:ip_adress:port/sid"private Connection conn = null;private Statement stmt = null;ResultSet rs = null; public testsybase() try Class.forName(sDbDriver); catch (java.lang.ClassNotFoundException e) System.err.println("testdb():" + e.getMessage();public void
10、 executeUpdate()stmt = null;rs = null;try conn = DriverManager.getConnection(sConnStr, "*","*");stmt = conn.createStatement();System.out.println(new Date();int j=0;for(int i=0;i<10000;i+) j=10001+i;/ 追加sql="insert into tablename(*, *, *.) "+"values('test&quo
11、t;+i+"',*,*.)"/ 更新/sql="update tablename set field_no='testupdate',*,*. where filed_no="+j;/ 删除/sql="delete from tablename where tablename="+j;/ 查询/sql="select * from tablename wheretablename="+j;stmt.executeUpdate(sql);/rs=stmt.executeQuery(sql);/
12、rs.next();System.out.println(new Date();/rs.close();stmt.close();conn.close();System.out.println("Update is secuessful!"); catch (SQLException ex) System.err.println("executeUpdate:"+ ex.getMessage(); public void executeSql(String sql) stmt = null;rs = null; try conn = DriverMana
13、ger.getConnection(sConnStr, "*", "*");stmt = conn.createStatement();rs=stmt.executeQuery(sql);rs.next();System.out.println("Count is "+rs.getString(1);stmt.close();conn.close();/System.out.println("OK"); catch (SQLException ex) System.err.println("execute
14、Sql:" + ex.getMessage(); public static void main(String args) testsybase mytest = new testsybase(); mytest.executeUpdate(); 上面的 java 代码调试通过后,可以通过注释不同的代码段,分别测试增加、修改、删除、查询的等情况的性能,并得出时长,反算出性能。这里说明一点,java 代码即可以单独的打成jar 包,放在服务器上运行,也可以直接在本地IDE 运行。如果觉得LoadRunner 专业,也可以放到LoadRunner 里运行,选择Java Vuser协议,这
15、里需要注意的是,LoadRunner运行时,需要设置好 Runtime Settings中的 Classpath ,代码运行需要的jar 包都要加到这里。提醒一点的是,笔者使用的是LoadRunner 8.0 ,在跑上面的代码时,使用的是Java 1.4 的虚拟机,高版本如1.5 就不能成功运行。从这个例子可以看出,此种应用灵活性强,任何数据库都可以做测试,只要有提供的驱动即可,如果需要,还可以扩展其他的方法。但测试人员需至少掌握一种高级编程语言,对数据库操作也必须很熟悉,要求较高,所以又引出了下面的Benchmark 的应用方法。3) Benchmark 应用1. 引言诚然上述的编写代码以进
16、行数据库性能测试,对于初级测试员来说还显得有点难度,如何才能使用比较简单的方法进行测试呢?这里将会介绍Quest 公司的 Benchmark Factory ,它以向导的方式一步步指引你开展测试,是一个很容易上手的工具。2. 模型设计假设有一个正在使用的数据库,库中有相当数量的数据,作为支撑某个系统用。每天上班时间中大概有 500 人次的 A 表写入记录,也大约有500 人次的 A 表查询;系统的程序每天大概会往数据库的B 表写进 50000 条记录,以及5000 条 C 表记录,还有1000 条 A 表记录,删除500 条 A 表记录,更新100 条 D表记录;然后管理员要对B 表、 C 表
17、及 D 表进行 50 人次查询。根据二八原则,百分之八十的工作在百分之二十的时间内完成,即上述列出的工作量,其80% 将在 1.6 小时完成。另外作为对比,本次测试再对该模型进行缩减处理,即在二八原则的基础上,工作量及时间都缩减为原来的 10% 。最终的结果是10 分钟内,对数据库进行的查询操作有40 条 A 表查询、BCD 表各 4 条查询;写操作有 120 条 A 表记录、4000 条 B 表记录、400 条 C 表记录;更新操作有8 条 D 表记录;删除操作有40 条A 表记录。3. 语句构建相关的 SQL 语句构建如下:1 、查询A 表select * from A2、查询B 表sel
18、ect * 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 Factory 提供的一个随即
19、函数。4. 方案建立在 Benchmark Factory 里面建立好 ORACLE 的 profile 后,新建一个 Scenario(Create a custom load scenario)Loail Scenario ViiardSelect LoAd. Scenui uSslesl th ft liii essnapi.fi t 驻电 ta of也&七电.DttkbMft: Oracle3 cl=旦ffiro翌二 4Load ScenioTestScftlibili tyTest SQL for ScalabilityRepJ.ay 1口ad from an Oracle
20、Tr x ce f il eT«st Stored Farocedures for Sc;J,:iT-ili .yImpor I from Que st Fr formantAr- oly?i!:靠卑=itgy SQLImpor t frcwn a D eLimti t.ed Text fileR唱yl盯 工omd figm m ODSC t耳程ce fileImpcrt from OriLcle Dynamic P«r £»rm<uic Vi awImporI frcMfi SQL filesCreate 注 euston load scenar
21、io (Scalability. Goal,Custom workldads alloi1 you to create workloads from user provi ded SQL. Th也名已 tests pr ovi de flexibility for ycrnur lo adL t ezti ng r e qui r em en t s. Cli eking Uext O-lews you tfl run thes& load scenarios 皿d provides <n 总薯口工回国tinn of each t «rtc上一小)|r一步)取消 因为有
22、多个SQL语句,所以类型选择混合(Mix)Load. Scenari o ¥i z&rdTest Typetfhat kind of test would jrcli like to create?Custom load scenario:a前温ii 户1 ”!*A 伸ix test i s uaed to test a. dataLai? by Handoni工f «K«cuting mmt of traitsact i ons . The lo aJ s cenax'i q runs 刍 tr ansa.cti. On ihi k bas ed
23、 Upon 叮色L小tw for w 二.白亡ifimd iteration tine ml mach predetermined ut&F load l&val.ReplayA Kepi ay <Ltst i s used to '.".上羽,;; tenting «£ i, set of triiiEftffticn? aft & pi*巨t :】-,* r-ub*r " tual uesrs. Trans icti &ns c*n b。fin for 5ptcifi c 工e.£ .k* it
24、 i. %】 lutlst of 史苫ecntiojis.r8卫A Go4 temt is ued to find m*im诉 tKrou£hput or response time iralues. A transaction 印i犬 is executed for 日 specified length of time at virtual user1 oa.d level5j det emi Tied By setting a te百iiuililb enLTLg, 财d i jiteirvaJ, vaiue .r EtfilibiliA SfiL Scalabili ty ts
25、it compares tlte p屯fEormaiic必 of SQL Staterient varLatitHiE unAei- m lead. EacK trans act i 6n Will e上 包亡 U.上电 i ndi_ Vi dually £ Of & acli "uh er ltJa.d for w £R0亡ifi&d number of ejjecutione or length of time.上一步集1 下一步国)| 一消接着选择添加SQL语句Trans action VizardDefine transactionSele
26、ct a transaction to add to the script.Transactions旦 Test Stored Procedures for Scalability1 ' Create SQL Statement Transaction.I Create Prepare SQL Statement Transaction6 Create Execute prepared SQL £ Wmerr Trans ti < n & Import TransactionAllows you to enter a single SQL Statement i
27、nto a Load Scenario or User Scenario that can include bind variables anA/or prepare a transaction to be executed by an execute prepare statement transaction Bind variables take the nl nf 1 i ar-el v all awi nvr»n n ronH th。 v«tna ttvofw。,kT -et amanf n th。上一步d)下一步国)|取消Transact ion Vi zardS
28、QL StatMcmtType the SQL stateraeiLt to: execute.select* from A<上一步直1 |下f ® >| 取消一一填写完成并根据模型设计赋予不同的权重(Weight)Load. Scenario Vi zardTruis hetman 112Enter or create 包 transae tion. mi义.Zach umst will run a. transact! an 1*ix d upon龈 t. Fox Example, i £ a t eat bustwo transact! ons A 皿 d
29、 B* wi th A having a weight of qd日 d E tiding a weight of £oour, on aver 3芭 e E w i3-l jrvEn four timgM For every t lire Ais ruu one e.Iha xun order will be randoiily generatied for ech user s(x they r& not all running tb.e same tr a_nsac ti oil simultaneously. Tkat run. k)r ler i 3 use A.
30、for tkat iisei- e aclt tim th test i£ per£iorme.d to enstirQ reproducible To A (a.,Hi nil lin-iill ini iliraiii* from D100010.1Ti-afiEActLah Mist&©_4七在 fro» A ft'HE. upda.£ e U &et . insert inte D g i, 一 insert into £ (ft, £.insertliiliHifilii
31、iiiiil iifet * trim 匚; Ferc«rar»s件1映二网0.8 I20 Itooa &Total Weight: 1155AdJ. User Scexiri oAdd SQL Stat emeitt取消大约设置一下并发用户数,完成后可以看到脚本区有着新增的事务列表nis-teEt. Tnb-testCustom Mix d电lt电 ujidate ITlESF t iTisertLo,d carLixiofrom A WKEKE EOH'Nl刑Q D sttVfc = jBTEaad (1J0) inti 匚 0. i, j) value
32、e (7, intc事)WftlueE14ini q 弁3团七)vGues (1,胃-'J同工一select *irqm dleC tifom Cfrom AScriptJobs Clique在右侧窗口还可以设置每次迭代的时间与并发用户数TrsrtEicti onsTotal IteFitiinI 好 00 : 20 : 00 Fra-S«ihpliA4| 0 3(1) 00: 00:433«n证血.| 0I-y(-> 00: IB: IT jJ"hfii 1 ang-h “£ +ar ezamt .:r aAsct: ors :ti or
33、 ter tc reach lsteidy state before stlcs 口已 1 f s 1El 工nglh£ <ir>e L。vlltcL iTu - itics vhile the is&rs arw"t:7euting traiLEaztionE.7his test consists -of 5 iteration& md e>=erates for 00 D*y M) ; 01 Howr s) : 40J eef Startup' Sturt all istrs as q.ickly 受工TrsnEicti ons
34、 3 Timing 而 U三w Lead 加Us ar Load d»t«rmn«iE the nwbsr cf virtial uj«rs for te?t i ttr4icn. Por examjile ialtctin( o£ 1/ ICO or.d 1003 v ill rxm工白土七 for ttjrQ* *七q1r电七1。工车事 one4 w 1 l;H 1 100 IC00 uzQirz aaaL.User Load .s) r Aid雷Add的心山泊130Benchmark F octory scales up to an un
35、limited number of virtual us era.You have 1 00 Virtual Users. CLeh i® 七 £心 门也上 口然后再到左边脚本区,在右键菜单中选择Submit Job ,这时候Benchmark Factory 就开始自动跑起 来了台匚Emit Job5.测试结果注:红色加粗字体为值得关注部分1、10分钟10个并发用户Test Run Id12StatusCompletedStart Time2008-3-2512:31StopTime2008-3-25 12:42Comment10min test2(10users)Sam
36、pling Time0h:9m:41sPre-Sample Time0h:0m:0sTPSRows-RowsBPSr-BPSBytesBytesOverall ResultsU.TPSBPSBytes1019.7536714.624009721330928Transaction Results - User Load: 10可见TPS约为并发用户数,应该还有上升空间,各 B表查询需时较长(同时B表的行数也比较多)SQL语句执行次数比较符合理想目标。用时方面就是,其他比较理想。另估计是B表的查询延迟了其他的操作,delete from A WHEREROWNUM<=158000.011up
37、date D set k = $BFRand(100)12000.094select * from D551200.002select * from C414067929840.065select * from B634396181954840.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导致SQL脚本总
38、体执行次数不算太多。2、80100个并发虚拟用户逐渐增加的 5次迭代Test Run Id13StatusComplete dStart Time2008-3-25 14:02StopTime2008-3-2516:43Comment1h40m 80100usersfmiHName:Custom Mix Load ScenarioTest Type:Mixed Workload Database TestTest Id:9VersionOverall Results80174.6219089544138842221387293785153.7443197939608651512537834690133.93481942613545885721379399595128.854622486158435828435056936100125.054469853182398669712356930Transaction Results - User Load: 80delete from A WHERE ROWNUM<=1753000.039update D set k = $BFRand(100)145000.015select * from D787818
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 博物馆文物搬运加固技师考试试卷及答案
- 2026年江苏省苏州市立达中学高三第五次模拟考试化学试题含解析
- T∕CATAGS 65-2023 航空生物燃料中微量元素检测方法
- 2026年河北省五个一名校高三化学试题第一次联考试题含解析
- 学校卫生服务与气候健康公平促进策略
- 甘肃省武威二中2026年高三下学期1月期末考试化学试题含解析
- 吉林省吉林市普通高中2026届高三下学期第八次统练(一模)化学试题含解析
- 2025~2026学年浙江金华市第五中学九年级下学期3月期初英语收心练习
- ECMO与体外二氧化碳清除技术
- 2026建设监理考试题库及答案
- 2026年同等学力申硕英语模拟卷
- 摩根士丹利 -半导体:中国AI加速器-谁有望胜出 China's AI Accelerators – Who's Poised to Win
- 2026辽宁沈阳汽车集团有限公司所属企业华亿安(沈阳)置业有限公司下属子公司招聘5人笔试历年参考题库附带答案详解
- 2025~2026学年江苏镇江市第一学期高三“零模”化学试卷
- 2026年公路养护工职业技能考试题库(新版)
- 宜宾市筠连县国资国企系统2026年春季公开招聘管理培训生农业考试模拟试题及答案解析
- 2026年福建南平市八年级地生会考考试真题及答案
- 2025-2030非洲智能汽车零部件行业市场供需理解及投资潜力规划分析研究报告
- 2026季华实验室管理部门招聘3人(广东)建设笔试模拟试题及答案解析
- 北京市大兴区瀛海镇人民政府招聘劳务派遣4人考试参考试题及答案解析
- 4.7-北师数学二下第四单元《有多厚》课件
评论
0/150
提交评论