A 任务表,B 生产表;C 存储过程,说明: 导入任务表大量数据,然后10个客户端,每个客户端启动6个线程,通过调用C 存储过程,获取N条(N > 0 and N < 100)A任务表中的数据然后对每条数据进行处理,然后处理完成,更新A 表中的数据状态,然后入库B 生产表 ;每个线程可能3秒左右处理一条数据,更新A 表状态,insert B1、实时导入 数据到 A表 N条记录3、存储过程 每次根据设定的 记录数 获取N条记录,select Top N update 现在的问题是,当启动6个客户端,36个线程同时获取任务的时候,非常流畅;但是再启动客户端 增加的 50~60线程以上,每次线程获取任务的时候,都会影响别的线程,别的线程可能对 A的状态更新 慢了很多,怀疑进行了锁表处理,但是我在存储过程中已经非常简化了,而且进行了行锁处理;不知道还有没有好的方法进行优化处理?C 存储过程,
CREATE proc GetFreeTicketInfo
@NO varchar(20),
@DistNo varchar(50) ,
@Money int,
@ICount Int --- ,LastTime = '+@DateTimeNo+'
asBEGIN TRANSACTION GetTask
SET NOCOUNT ON
SET ROWCOUNT @ICount
IF @Money < 500
begin
exec( 'UPDATE AutoTaskInfo with (ROWLOCK) SET NO = '''+@NO+''',DistStatus=''1'' , DistNo= '+@DistNo+',LastTime = getdate() WHERE TotalMoney < 500 and DistStatus = ''0'' ' )
end
Else
begin
exec( ' UPDATE AutoTaskInfo with (ROWLOCK) SET NO = '''+@NO+''',DistStatus=''1'' , DistNo= '+@DistNo+',LastTime = getdate() WHERE TotalMoney >= 500 and DistStatus = ''0'' ' )
endCOMMIT TRANSACTION GetTaskIF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION GetTask
ENDset rowcount 0
SET NOCOUNT OFF
GO
解决方案 »
- delphi 利用 调用 outlook 发邮件 已成功,但是。。。
- 如何将TXT文件导入richedit
- 第二十二期:CSDN论坛秀-Delphi版-本期作秀:hnhb(不死鸟)
- excel嵌入olecontainer后,程序运行时无法打开其它excel文件,怎么办?
- 需求师资管理系统源代码,
- 怎设定打印机打印出来的字体?
- 关于Delphi 和 VB 的讨论,请大家发言。
- 消息处理问题
- 怎样调用拨号连接对话框?
- handle为什么是数字
- 技术不高,写了个驾校管理软件免费给人家用,结果得到不错的口碑,所以继续开发了个新版的想赚点生活费,请各位给点意见
- delphi 2007 和delphi 7哪个好用?
如何支持并发,