同时运行的SQL Server 2005存储过程会导致延迟

时间:2013-06-11 23:39:10

标签: sql-server-2005 stored-procedures concurrency

我的系统中有一个存储过程已经运行很长时间,因为它处理大量数据和导出过程。为了论证,程序将自行运行大约10秒。有时我会看到这个程序背靠背调用相同的参数。

致电1 - 开始12:00:10;持续时间30秒

致电2 - 开始12:00:15;持续时间10秒

看来第一个电话正在等待第二个电话完成才能完成。我已阻止进程报告运行,并且没有从分析器获得任何命中;另外,当我检查sys.dm_exec_requests时,我没有看到SPID被彼此阻止,并且最长的wait_type是async_network_io。

存储过程使用#temp和@temp表。我遇到了什么我应该检查或更改以控制这个?

1 个答案:

答案 0 :(得分:1)

"最长的wait_type是async_network_io" - 这通常是传输过多数据的症状,例如SELECT *在大桌子或宽桌子上。

更新以回应您的评论:

  

"是的,这个程序有各种各样的功能。 1)返回20行   来自第1页.2)有内部逻辑将其转换为数据   倾销;返回所有客户数据的地方。

听起来您受到参数嗅探和不适当的缓存查询计划的影响。将您的过程拆分为两个单独的存储过程。这样每个人都可以拥有自己的缓存查询计划。

另请注意:表变量不会为它们创建统计信息,因此有时您可以通过转换为使用临时表来看到显着的性能改进。