浅谈SQL Server数据库并发测试方法

运维 数据库运维 SQL Server
本文将为大家介绍SQL Server数据库并发测试方法,包括利用测试工具模拟多个最终用户进行并发测试、利用测试工具编写脚本,直接连接数据库进行并发测试等等方法。

1. 利用测试工具模拟多个最终用户进行并发测试;

这种测试方法的缺点:最终用户往往并不是直接连接到数据库上,而是要经过一个和多个中间服务程序,所以并不能保证访问数据库时还是并发。其次,这种测试方法需要等到客户端程序、服务端程序全部完成才能进行;

2. 利用测试工具编写脚本,直接连接数据库进行并发测试;

这种方法可以有效的保证并发操作,而且在数据库访问程序完成即可测试,可以大大缩短测试时间,而且测试效果更好。

下面通过一个演示程序,演示使用Robot使用第二种测试方法进行数据库的并发测试。

***步:创建演示程序

打开SQL SERVER查询分析器,在SQL SERVER测试数据库中执行下列脚本(脚本执行操作:创建表testtable,并插入一条记录;创建存储过程test): 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[Test]

GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[testtable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[testtable]

GO

CREATE TABLE [dbo].[testtable] (

[testid] [int] NULL ,

[counts] [int] NULL

) ON [PRIMARY]

GO

insert into testtable (testid,counts) values (1,0)

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

CREATE Procedure dbo.Test

as

declare @count int

begin tran TEST

select @count=countsfrom testtable where testid=1

update testtable setcounts=@count+1

if (@@error >0) begin

rollback tran TEST

end else begin

commit tran TEST

end

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

第二步:创建测试脚本

在Robot中新建VU脚本,输入以下内容:

 #include 

{

push Timeout_scale = 200; /* Set timeouts to 200% of maximum response time */

push Think_def = "LR";

Min_tmout = 120000; /* Set minimum Timeout_val to 2 minutes*/

push Timeout_val = Min_tmout;

ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver");

set Server_connection = ser;

push Think_avg = 0;

sync_point "logon";

sqlexec ["sql_1000"] "testdb..test";

sqldisconnect (ser);

}

说明:

ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver")

sa为数据库用户名,888为sa密码,192.168.0.99数据库IP地址

以上三项按实际的测试数据库设置更改,其他两项不用修改

sqlexec ["sql_1000"] "testdb..test"

testdb为新建存储过程test所在的数据库,按实际的数据库修改

第三步:执行测试

运行上一步创建的脚本(运行时自动创建Suite),在Run Suite窗口中的"Number of users"上输入20。运行完脚本,打开数据库查看counts的数值。把counts值改为零多次运行脚本,观察每次运行后counts的结果。

测试说明:

1. 测试示例程序的目的是,存储过程test每执行一次,表testtable中的counts字段增加一;

2. 第三步的测试可以发现每次执行后counts结果并不相同,而且不等于20,这说明这个程序是在并发时是问题的;

3. 将存储过程中的select @count=countsfrom testtable where testid=1修改为select @count=countsfrom testtable with (UPDLOCK) where testid=1。再次进行并发测试,每次的结果应该都是20。

以上演示程序,仅仅演示了测试的方法。在实际的数据库并发测试中,首先要确定存在哪些并发情况、哪些数据受到并发影响,然后编写脚本,设置suite进行并发测试。

【编辑推荐】

  1. 用并行查询让SQL Server加速运行
  2. 减少SQL Server数据库死锁的方法
  3. MySQL***高并发网站实战攻略
责任编辑:彭凡 来源: 51CTO论坛
相关推荐

2009-03-19 09:44:07

SQL Server数据库迁移数据库

2010-07-15 17:28:50

SQL Server

2010-09-14 09:53:52

sql server还

2011-06-24 15:57:35

SQL AzureDAC

2011-03-29 09:40:31

SQL Server数据库链接

2011-03-30 15:36:31

SQL Server

2009-05-04 13:43:16

SQL Server置疑数据库恢复

2009-03-30 10:56:58

SQL Server数据库死锁数据库

2009-01-27 21:00:00

服务器数据库SQL Server

2010-10-26 15:54:02

连接oracle数据库

2010-07-08 11:05:14

SQL Server数

2011-08-25 16:13:31

SQL Server批量替换数据

2021-05-17 06:57:34

SQLServer数据库

2010-09-13 15:55:17

SQL Server数

2010-09-13 15:31:14

sql server数

2011-03-28 14:29:46

SQL Server数主键列

2010-09-03 11:00:47

SQL删除

2010-11-08 16:04:06

SQL SERVER连

2010-11-08 14:02:40

SQL Server系

2010-09-06 09:53:41

SQL Server语句
点赞
收藏

51CTO技术栈公众号