设为首页 收藏本站
查看: 488|回复: 0

[经验分享] 浅谈SQL Server数据库并发测试方法

[复制链接]

尚未签到

发表于 2016-11-4 08:39:43 | 显示全部楼层 |阅读模式
1.利用测试工具模拟多个最终用户进行并发测试;
这种测试方法的缺点:最终用户往往并不是直接连接到数据库上,而是要经过一个和多个中间服务程序,所以并不能保证访问数据库时还是并发。其次,这种测试方法需要等到客户端程序、服务端程序全部完成才能进行;
2.利用测试工具编写脚本,直接连接数据库进行并发测试;
这种方法可以有效的保证并发操作,而且在数据库访问程序完成即可测试,可以大大缩短测试时间,而且测试效果更好。
下面通过一个演示程序,演示使用Robot使用第二种测试方法进行数据库的并发测试。
第一步:创建演示程序
打开SQL SERVER查询分析器,在SQL SERVER测试数据库中执行下列脚本(脚本执行操作:创建表testtable,并插入一条记录;创建存储过程test): 


ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Test]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[Test]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[testtable]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[dbo].[testtable]
GO
CREATETABLE[dbo].[testtable](
[testid][int]NULL,
[counts][int]NULL
)ON[PRIMARY]
GO
insertintotesttable(testid,counts)values(1,0)
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
CREATEProceduredbo.Test
as
declare@countint
begintranTEST
select@count=countsfromtesttablewheretestid=1
updatetesttablesetcounts=@count+1
if(@@error>0)begin
rollbacktranTEST
endelsebegin
committranTEST
end
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
  
第二步:创建测试脚本
在Robot中新建VU脚本,输入以下内容:


 #include
{
pushTimeout_scale=200;/*Settimeoutsto200%ofmaximumresponsetime*/
pushThink_def="LR";
Min_tmout=120000;/*SetminimumTimeout_valto2minutes*/
pushTimeout_val=Min_tmout;
ser=sqlconnect("server","sa","888","192.168.0.99","sqlserver");
setServer_connection=ser;
pushThink_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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-295524-1-1.html 上篇帖子: sql server 批量修改用户表 存储过程所有者 下篇帖子: SQL Server 中导入*.db数据库文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表