浅谈SQL Server数据库并发测试方法
来源:互联网 发布:学生笔记本推荐 知乎 编辑:程序博客网 时间:2024/03/29 19:17
1.利用测试工具模拟多个最终用户进行并发测试; 这种测试方法的缺点:最终用户往往并不是直接连接到数据库上,而是要经过一个和多个中间服务程序,所以并不能保证访问数据库时还是并发。其次,这种测试方法需要等到客户端程序、服务端程序全部完成才能进行; 2.利用测试工具编写脚本,直接连接数据库进行并发测试; 这种方法可以有效的保证并发操作,而且在数据库访问程序完成即可测试,可以大大缩短测试时间,而且测试效果更好。 下面通过一个演示程序,演示使用Robot使用第二种测试方法进行数据库的并发测试。 第一步:创建演示程序 打开SQL SERVER查询分析器,在SQL SERVER测试数据库中执行下列脚本(脚本执行操作:创建表testtable,并插入一条记录;创建存储过程test): 第二步:创建测试脚本 在Robot中新建VU脚本,输入以下内容: 说明: 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进行并发测试。
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
#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")
- 浅谈SQL Server数据库并发测试方法
- 浅谈SQL Server数据库并发测试方法
- 浅谈SQL Server数据库并发测试方法
- 浅谈SQL Server数据库并发测试方法
- 浅谈SQL Server数据库并发测试方法
- 浅谈SQL Server数据库并发测试方法
- 浅谈server sql 数据库优化
- 浅谈SQL Server数据库分页
- 浅谈SQL Server Engine GQL测试(一)
- SQL SERVER并发压力测试工具
- 浅谈SQL Server 数据库之触发器
- 浅谈C#链接SQL server 数据库问题。
- 浅谈sql server数据库的存储过程
- SQL Server中,浅谈数据库的触发器
- SQL server数据库并发控制--加锁
- 数据库并发控制及SQL Server的并发控制机制
- 压缩SQL SERVER数据库方法
- sql server 独占数据库方法
- 为什么在loadrunner录制的时候,action里面都是空的,怎么办呢?
- 网络编程之-原始套接字
- Java中split的用法
- 基于 Apache Mahout 构建社会化推荐引擎
- 关于JUQERY在多浏览器的不兼容问题
- 浅谈SQL Server数据库并发测试方法
- js内存泄露
- 仓库数据增量更新加载算法(支持混乱日期跑批)
- android 对于apk签名汇总
- DBCC DBREINDEX 重建索引
- mysql float 的问题
- 如何正确的进行人生规划
- android布局
- 使用cron,logrotate来管理日志文件