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

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

上一篇 / 下一篇  2008-07-02 09:37:37 / 个人分类:性能测试

 

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

I5YC3Ad$j6l0

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

 51Testing软件测试网7YzF]{1d

4章 应用实例讲解

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

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

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

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

import java.sql.*;

s G;D R}:fG0

public class testclus {

.O \1jN0s5t'J5?8w}0

       public static void main(String[] args) { 51Testing软件测试网2D7TT$KOh/W2V/] {V

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

.EZ1I^Dm!YSu0

              if (args.length!=2)

IJ?1G_ s}0

              {

0VwQ|lSN0

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

*s,]i:o;|sW `Z0

                     return;

d?C+s`t n0

              }

*] F&Ts.HP0

  //根据传入参数,动态建立连接字符串

t9{.G N p0

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

m9AeX:{.ZV$B;J-t0

              int cnt = Integer.parseInt(args[1]);

J8GQ,wI K0

              try { 51Testing软件测试网`Pj*r2[:v'F5~fXj

  //声明并得到起始记录插入时间51Testing软件测试网b;w[(e(R1p

                     long timeBegin;

H.swn3^0H ] I0

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

x/M*z-J.R!J-\Sk!};F0

  //数据库连接初始化操作

}D(Q\gIvV0

                     Class.forName("com.mysql.jdbc.Driver").newInstance();51Testing软件测试网9`;H*a3gm$I:c t

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

;\Ld2BY2A9D0

  //循环插入记录

An H ]]%v,} Xz-s0

                     PreparedStatement pstmt = conn.prepareStatement("insert into test(cnt, timer) 51Testing软件测试网ks)o5}){0]

values (?, now())");

0b G8u"?1ufE6uZ0

                     Statement s=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,51Testing软件测试网3B%TO,z$Hj]+?7]

ResultSet.CONCUR_READ_ONLY);

L p/p-A ``0

                     timeBegin = d1.getTime();   51Testing软件测试网oR$]4@P j

                     for (int i=1; i<=cnt; i++)51Testing软件测试网f:S_Iub

                     {

G.d`[N0

                            pstmt.setInt(1, i);

U\VBS7k.~0

                            pstmt.executeUpdate();51Testing软件测试网 O MwrE

                            ResultSet rs=s.executeQuery("select count(*) from test");

+eui2b-Oc~ g.O0

                     }51Testing软件测试网O!D,ni+A%U-DR(y&S

                     conn.close();

#wJn1oGw0

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

"I7`K:a#W)q0

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

E9U"DE9J W#h1l!_0

                     System.out.println(d2.getTime()-timeBegin+" 毫秒");51Testing软件测试网0~^!j9\ja%P

              }

A!kPp|/v@!r0

    //异常处理部分51Testing软件测试网O T$?.~{*b3Q

              catch(ClassNotFoundException e) {

&KC(f"p3E0

                     System.out.println("找不到驱动程序"); 51Testing软件测试网"^1ZM0JSXC2l

                     e.printStackTrace();

T!X}+l/v cS;j/w3o0

              } 51Testing软件测试网 q}\$cz"M-j$S

              catch(SQLException e) { 51Testing软件测试网wGy2_0pQD

                     e.printStackTrace(); 51Testing软件测试网4D u&xlS.~!b

              } 51Testing软件测试网"]g Ef rj

              catch (Exception e) { 51Testing软件测试网BY"H7Ot2sX4H }x7Z9H

                     e.printStackTrace();

0XM*Frab+X X0

              }51Testing软件测试网 v:S*xz7Ah9T

       } 51Testing软件测试网0^%xJcJ-Rs q

}

8L3yL3l\n#P:a%|P0

接下来,再建立一个批处理文件,批处理文件内容如下:51Testing软件测试网6Q!jLQDe A4n

@echo off51Testing软件测试网2L+N iB7s"p Ka.J

if "%JAVA_HOME%" == "" goto error_setting51Testing软件测试网O8MP5?^+a|!Y

set CLASSPATH=%JAVA_HOME%"jre"lib"rt.jar51Testing软件测试网hC4Md,y}

set CLASSPATH=%CLASSPATH%;mysql-connector-java-3.1.7-bin.jar;testclus.jar

'k#l(Ly6p Fv P0

%JAVA_HOME%"bin"java -classpath "%CLASSPATH%" testclus %1 %2

Yz6xXbt0

goto end51Testing软件测试网$cp v8`Eg;M~K

:error_setting51Testing软件测试网iZ^@9RW*~!D[L\

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

^$^}_m#RXy#n+z\ o0

echo 使用方法:

M m3_Q1y~ ?,C}(a0

echo     1.请设置JAVA_HOME环境变量(JDK1.4安装路径);

&Fh?MDqh%r0

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

echo -------------------------------------------------------------------------------------51Testing软件测试网 @"]pA^s,g@

goto end51Testing软件测试网 }t/H)X|0ZC"]B(n z4k

:end51Testing软件测试网N S4G#gf}PZ

set CLASSPATH=51Testing软件测试网`-C;iRG+[{^P5_

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

4.1.2批处理方式解决方案

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

#include "web_api.h"51Testing软件测试网 wE$t*{ M

Action()51Testing软件测试网h*utoo(gMW

{51Testing软件测试网^9L-Sd;\7KE?+{

    lr_rendezvous("in");51Testing软件测试网 O,`.Z/^:nq

    system("testclus 192.168.0.45:3306 1000");51Testing软件测试网"STm uB vB:~-P)W

    return 0;

gFT }~QR'g0

}

(B+c'A8lR+C+EG0

为了进行集群测试,还需要另外创建两个脚本,两个脚本如下:51Testing软件测试网-X3?I~ O

#include "web_api.h"

Z3x*Z+U#o~D0

Action()

a$m;S/\`,?U&]#@)zc0

{51Testing软件测试网;B"k p`Y[p6thD

    lr_rendezvous("in");51Testing软件测试网 t#IHMO'J;~;S D

    system("testclus 192.168.0.44:3306 1000");

+hpFdP0

       return 0;51Testing软件测试网2Q5Qeg kI Men

}

v4~] L%bk0

#include "web_api.h"

FM UU `"Glu0

Action()

o'~k$@2KJ_0mm:Q:M0

{51Testing软件测试网'uW)f s4]vL"dV[

    lr_rendezvous("in");

8E~A:F3Hr0

    system("testclus 192.168.0.46:3306 1000");51Testing软件测试网H%rRb T(Q;G*Q

       return 0;

P:[/E?n0

}

)PbWR*_$d.H }0

接下来,就可以分别在Controller中进行负载了,相应场景设置如下:51Testing软件测试网 Q$^k,Rt^`\
51Testing软件测试网|{ [#I'j#x"U

kb Z*WWh0

41:单一数据应用服务器场景设置51Testing软件测试网`r.b!w AWJ'Xla!c

,]2Q@$^ \+@x?y c0
51Testing软件测试网R;XRSIkV

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

"n&\1u2M br` M B|0

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

【作者提示】

$\l h4u-W`|x%F0

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

-l@-l^ Kd:Zd'C-xs0

2.         如果几个脚本要实现并发,集合点一定要设置成相同的名称,如在本例中名称都为“in”。

bE*qD#Z;s D0

3.         Java程序运行所依赖的jar包以及批处理文件应放置到脚本所在目录,否则无法正确运行。

m4l1Ud%pz4Cb ^0

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

51Testing软件测试网*w'|}.TU;[8z4M.C
51Testing软件测试网t/F"Pu&w8h
[新闻]Google AdSense 推介计划即将暂停51Testing软件测试网p8Gr.c?#_{ns}3N

:f5D5[ l0B3c3nD0Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/22/1204842.html

TAG:

 

评分:0

我来说两句

Open Toolbar