可以在sql中并行插入语句导致死锁吗?

时间:2012-03-21 03:59:14

标签: sql sql-server sql-server-2008 sql-server-2005

我正在使用SP来执行许多表的选择并集而没有锁定。这将通过许多分组和sumation进行大量计算,因此运行大约需要2分钟。我需要为大约500个不同的数据集运行它。所以它总共需要大约1000分钟。

为了减少这种情况,我需要并行运行此计算。因此,如果我并行运行4组数据,我应该在大约250分钟内完成。

但问题是,一旦我完成了这个计算,我得到一组数据,我需要存储到一个表中,该表在其4列上有一些主键约束。因此,当并行运行时,我期待一些死锁问题。所以我在考虑将这些数据写入一个临时表,该表具有相同的列但没有主键或任何约束。

因此,我希望不应该有死锁。请在这方面提出建议,如果我的理解是正确的,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:4)

INSERT不能在同一个表上与另一个INSERT死锁,因为同一个表上的两个INSERT语句将始终以相同的顺序获取锁。话虽如此,我必须对你的陈述发表评论:

  
    

如果我并行运行4组数据,我应该在大约250分钟内完成。

  

你没有理由期待这一点。首先,这样的声明表示你忽略了Amdahl's law。其次,SQL工作负载在内部已经已经并行,您的过程中的查询尽可能使用并行计划,如果它包含许多'分组和汇总,请参阅Parallel Query Processing尤其是 ”。

最终您面临的是优化任务。像任何其他优化任务一样处理它,首先确定瓶颈。你踏上这段旅程时必须阅读Waits and Queues