我的地盘我做主! 博客:http://tester2test.cnblogs.com/   msn:win_soft@163.com

一种特殊的数据库性能测试方法

上一篇 / 下一篇  2008-07-05 20:24:07 / 个人分类:其他

 

网上订购地址:  http://www.china-pub.com/39876

Y3X5rik%XG0

转载请注明:作者 及其 原文链接 

 

V%PY:JAOo+E.dl0

4章 应用实例讲解

4.1 一种特殊的数据库性能测试方法

很多同志在进行数据方面性能测试时束手无策,前面在第二章的第二节我们已经介绍了如何应用ODBC协议录制LoadRunner 8.0自身带的Flights-ODBC_Access”例子。这里作者为您提供另一种简便的方法。问题描述:一个面向全国各个中小学的信息管理系统,随着系统被广泛的应用,访问人数的急剧增加、数据量也在飞速增长,如何为用户提供方便、快捷的应用呢?

nN1P Ia5b9X B7B G0

4.1.1数据库集群项目背景介绍

经过公司相关技术人员的讨论,决定采用数据库的集群技术来解决这些问题,将先前1台数据应用服务器扩展为3台。数据库为Mysql,如果您关心数据库的集群技术,请查阅相关资料,在这里不再赘述。实施的整体思路是这样。由于操作人员主要是进行数据的插入工作,在某一段时间内操作人员比较集中,数据量也较大,为了估计集群后会给性能带来多大的提升,我们分别部署了两套运行环境,一套是先前的单一数据库应用服务器环境,另外一个则是三台数据库服务器进行集群。为了记录用户并发插入大数据量系统的响应时间,在相关表中添加了日期时间型字段,记录插入首条和末尾记录的时间,这样,末尾时间减去首条记录插入时间,就是多用户并发插入大批量数据的执行时间了。实施过程如下:第一步,数据库管理员用Java写了一段代码:51Testing软件测试网%K,Fs'upCP8GqmiB

import java.sql.*; 51Testing软件测试网8O nG8W I1a+rs

public class testclus {

BOz ]y_ i0

       public static void main(String[] args) {

Y7C:Y n[1_B0

//如果传入参数个数不等于2,则给出提示信息"调用:java testclus ip:port recordcnt"

r!G;r IqO]M0

              if (args.length!=2)51Testing软件测试网5?B+Z6}s(Mo"ek?_

              {51Testing软件测试网+Z2C,k/M@?e

                     System.out.println("调用:java testclus ip:port recordcnt");

W/M-iC7i\.O Xstn0

                     return;

`cNp~0

              }51Testing软件测试网c-^i6G'Ee)^

  //根据传入参数,动态建立连接字符串51Testing软件测试网 M|0}_9X1cB&b]V

              String URL = "jdbc:mysql://" +args[0]+"/testclus?characterEncoding=gbk";

AaFXC Xb0

              int cnt = Integer.parseInt(args[1]);51Testing软件测试网l:iDef%s%^

              try {

'O3oK$Yb0

  //声明并得到起始记录插入时间51Testing软件测试网F} RiX

                     long timeBegin;51Testing软件测试网IZ4y'}!qU[3TYO

                     java.util.Date   d1 = new java.util.Date();51Testing软件测试网/d| E:S[7H)moi

  //数据库连接初始化操作51Testing软件测试网vL4hwC_$m

                     Class.forName("com.mysql.jdbc.Driver").newInstance();

c+nH$P:N0

                     Connection conn = DriverManager.getConnection(URL,"root","admin");

| noz'? ~0

  //循环插入记录51Testing软件测试网:@T5X rDu

                     PreparedStatement pstmt = conn.prepareStatement("insert into test(cnt, timer)

c5]UG`{5I [2g0

values (?, now())");51Testing软件测试网5o'T'Ah4~}0h

                     Statement s=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,51Testing软件测试网&~vBjY)P}%_o

ResultSet.CONCUR_READ_ONLY);

Zx-u#j9x9L-S7r0

                     timeBegin = d1.getTime();  

jQ6f:g)B9QMd)s:X0

                     for (int i=1; i<=cnt; i++)

S{'Fe,P0

                     {

?,f$L-p(vpN0

                            pstmt.setInt(1, i);51Testing软件测试网!SJ5M{ G]6h

                            pstmt.executeUpdate();

j ng#P&tK4w0

                            ResultSet rs=s.executeQuery("select count(*) from test"); 51Testing软件测试网&]6M%EC!zj;k^

                     }

f3Xgz ?.c-u0

                     conn.close();

t R*zISq P ?0

//得到末尾记录和起始记录插入的时间差值并输出

j;s(mv3p\0

                     java.util.Date   d2 = new java.util.Date();  

5N:LFM$mND0

                     System.out.println(d2.getTime()-timeBegin+" 毫秒");

7_fY1Q9w#B vQ&O0

              }

2[D.Q-l*q8G2f.{9m0

    //异常处理部分51Testing软件测试网/yTi-^1?N"AC

              catch(ClassNotFoundException e) { 51Testing软件测试网!O Zu/gq Qj%o

                     System.out.println("找不到驱动程序"); 51Testing软件测试网8jW4X km

                     e.printStackTrace(); 51Testing软件测试网1Ja8f%\#_

              } 51Testing软件测试网;j-vg*FKbIS4h

              catch(SQLException e) {

({K/b7A"n/e6}G0

                     e.printStackTrace();

zMo#p@8X2HU0

              } 51Testing软件测试网G'b3t;@0jh I:}?~ULB

              catch (Exception e) {

8^_?Gx4Q0

                     e.printStackTrace(); 51Testing软件测试网,F4m?Ot6O

              }

j5vv)I/?xN0

       } 51Testing软件测试网\;{/k*|uf{

}51Testing软件测试网]T4VHwx{0b

接下来,再建立一个批处理文件,批处理文件内容如下:

3|4]$PF:C+BF,fW}0

@echo off

Q p!v!i6`~,} x0

if "%JAVA_HOME%" == "" goto error_setting51Testing软件测试网j7E6}(d6dPs

set CLASSPATH=%JAVA_HOME%"jre"lib"rt.jar51Testing软件测试网0}+ps%fY}m"b&^

set CLASSPATH=%CLASSPATH%;mysql-connector-java-3.1.7-bin.jar;testclus.jar51Testing软件测试网@_ YJ|)A []8iL-Ki

%JAVA_HOME%"bin"java -classpath "%CLASSPATH%" testclus %1 %251Testing软件测试网e5W RG6U

goto end51Testing软件测试网k C(q&EKLI

:error_setting51Testing软件测试网/_d-TA$Ni{

echo -------------------------------------------------------------------------------------

x6g`5SMM4?0

echo 使用方法:51Testing软件测试网7EGGOI L$MMZ`

echo     1.请设置JAVA_HOME环境变量(JDK1.4安装路径);51Testing软件测试网3P3Qap[;l

echo     2.请先将本程序所在的目录选择为当前目录后再执行。51Testing软件测试网 _c-W kt h

echo -------------------------------------------------------------------------------------51Testing软件测试网 EyEz-E-]7C'y(C

goto end51Testing软件测试网3TM`4B,|

:end

+Mu5|7Z'|x9D{ z0

set CLASSPATH=51Testing软件测试网*E%Zd I#P.G2_/~

批处理接受2个参数,第一个参数为数据库服务器的“IP地址+:+端口号”,第二个参数为需要循环插入的数据数。如:testclus 192.168.0.45:3306 1000 ,其含义就是向IP地址为192.168.0.45,端口为3306mysql数据库中插入1000条记录。51Testing软件测试网xN&nn$F d

4.1.2批处理方式解决方案

LoadRunner 如何调用批处理文件呢?LoadRunner 中可以调用System()函数来调用一个可执行文件或者批处理文件等,所以我们就可以直接调用该函数,指定相关参数,为了能够进行多用户并发,需要插入集合点。相关脚本如下:51Testing软件测试网w-Z%fOa4j7n$W9I

#include "web_api.h"51Testing软件测试网c3ZcI,QW

Action()51Testing软件测试网/qy+?!ORj

{

f9R/|J,um R*x;R/V0

    lr_rendezvous("in");51Testing软件测试网'I"o9zF+j:Z2_3og-c

    system("testclus 192.168.0.45:3306 1000");51Testing软件测试网$QT?6O1uo+O9z

    return 0;51Testing软件测试网q,dz-Q&u8z:k5U

}51Testing软件测试网 G0si%m l/D2Q

为了进行集群测试,还需要另外创建两个脚本,两个脚本如下:51Testing软件测试网3k3G{~ w#?;qc;b

#include "web_api.h"

E h)r#?$i0

Action()51Testing软件测试网D#Zm}J;E

{

4m6m(u%EBD0

    lr_rendezvous("in");

_)CRSjeA]-`0

    system("testclus 192.168.0.44:3306 1000");

.];C_~/pU,qD0}I0

       return 0;

&v$H%N3s1t!k"{$d2x x j0

}51Testing软件测试网kr9qhh$KE#y

#include "web_api.h"51Testing软件测试网K"a |*u JZ7t

Action()

4kA E[F;p%i0

{

0~p3] e U0

    lr_rendezvous("in");

[f0S7x K5`u*U0

    system("testclus 192.168.0.46:3306 1000");51Testing软件测试网@#P1tLU%S @Wt9|z2V

       return 0;51Testing软件测试网y&x)?"ef

}

L#Wo Yy.V:AwY5x0

接下来,就可以分别在Controller中进行负载了,相应场景设置如下:
{-^6S!V v WCT%W6n0z0
f)V!L2eH,}k0rALw0
51Testing软件测试网 L/s Rw!i&R,OrNN

41:单一数据应用服务器场景设置51Testing软件测试网&kR F @[Y#L

;h z,?M UA#jS*R0r0
51Testing软件测试网n[Oy(v)cz

42:三台数据应用服务器集群场景设置

;u^5|'t)B;Fxb4}0

而后该场景在数据库为空和数据库存在百万条记录情况下分别进行测试,经过几轮测试对结果的分析发现集群后性能比单台数据应用服务器的性能提高35倍。

#{-CBp,@h Xm w0

【作者提示】51Testing软件测试网:Do8Qcz ow

1.         在进行性能测试的时候,一定要注意环境的一致,包括:操作系统、应用软件的版本以及硬件的配置等,而且在进行数据库方面的测试的时候一定要注意数据库的记录数、配置等要一致,只有在相同条件下进行测试,才可以对结果进行比较。51Testing软件测试网{'\s_E1mA&YK

2.         如果几个脚本要实现并发,集合点一定要设置成相同的名称,如在本例中名称都为“in”。51Testing软件测试网,Rx+MOf

3.         Java程序运行所依赖的jar包以及批处理文件应放置到脚本所在目录,否则无法正确运行。51Testing软件测试网5D(V!IAQg

4.         将场景保存以后,建立一个批处理文件,通过wlrun命令来启动Controller执行场景也是一种非常好的方法,通过AT命令或者计划调用批处理则控制更加灵活,与Controller场景的定时运行取得相同的效果。在本书的第六章提供了AT命令和计划应用的介绍,有兴趣的同志,可以看一下这部分内容。51Testing软件测试网9c*x{W8~{ IF,r


baOy GR)O051Testing软件测试网/O F(l,f8X Tr4x g
[新闻]微软在台北发布新色鼠标产品51Testing软件测试网,\;\'r&h7u-T!_e

IY4L%xt(m&C0Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/22/1204842.html

TAG:

 

评分:0

我来说两句

Open Toolbar