我正在使用SP来执行许多表的选择并集而没有锁定。这将通过许多分组和sumation进行大量计算,因此运行大约需要2分钟。我需要为大约500个不同的数据集运行它。所以它总共需要大约1000分钟。
为了减少这种情况,我需要并行运行此计算。因此,如果我并行运行4组数据,我应该在大约250分钟内完成。
但问题是,一旦我完成了这个计算,我得到一组数据,我需要存储到一个表中,该表在其4列上有一些主键约束。因此,当并行运行时,我期待一些死锁问题。所以我在考虑将这些数据写入一个临时表,该表具有相同的列但没有主键或任何约束。
因此,我希望不应该有死锁。请在这方面提出建议,如果我的理解是正确的,请告诉我。谢谢。
答案 0 :(得分:4)
INSERT
不能在同一个表上与另一个INSERT
死锁,因为同一个表上的两个INSERT
语句将始终以相同的顺序获取锁。话虽如此,我必须对你的陈述发表评论:
如果我并行运行4组数据,我应该在大约250分钟内完成。
你没有理由期待这一点。首先,这样的声明表示你忽略了Amdahl's law。其次,SQL工作负载在内部已经已经并行,您的过程中的查询尽可能使用并行计划,如果它包含许多'分组和汇总,请参阅Parallel Query Processing,尤其是 ”。
最终您面临的是优化任务。像任何其他优化任务一样处理它,首先确定瓶颈。你踏上这段旅程时必须阅读Waits and Queues。