如何模拟测试在同一时刻(同1秒),2个相同用户同时执行同表的更新数据sql

[复制链接]
查看11 | 回复3 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
sqlserver2005 在线问题
如何模拟测试在同一时刻(同1秒),2个相同用户同时执行同表的sqlupdate a set value=value-10 where id=5;
和 update a set value=value-10 where id=25;
(测试原因 发现经常在同一秒发生死锁,导致当前那1秒只能1条update sql 按道理应该减去2次, 但是实际上只发现扣1次 )
1找到一个帖子与这有关,见下面提示 在 在Robot中新建VU脚本
这里疑问Robot是什么东西(软件)
2 我在windows 用类似linux crontab 同1秒同时执行2个sql 进行更新
发现没有死锁的 。 只能这样推断 当死锁那个时候环境很复发,select 更新比较多
索引估计有行级锁。 导致有异常。mysql 是有办法 ,反倒到了图形化界面没有办法利用脚本 ???(如果有请推荐)
附后
创建测试脚本下面不知道robot含义
在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);
}

回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我认为这两条update不是造成死锁的根源。因为sql server在update时,先u锁再x锁,这种锁只会造成阻塞或者说是等待,不会造成死锁。猜想是其它的select与update造成死锁。你可以使用追踪标志来追踪死锁,以找到死锁源。一般情形下应该是select语句引起的。
以下语句打开死锁追踪并将结果写入sql server错误日志文件中:
dbcc traceon(3604)
go
dbcc traceon(1222)
go
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
对一个DB来说,没有同一时刻的概念,都是序列化处理的
同1秒,普通的SVR也能处理1千多小事务
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你搞一个BEGIN TRAN
执行....
等待.

另一个用户,也是这样,就可以模拟出死锁的情况来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行