我有一个SP,它在不锁定的情况下对许多表进行选择并集。这将对许多分组和求和进行大量计算,因此运行大约需要2分钟。我需要针对大约500个不同的数据集运行此程序。因此,总共大约需要1000分钟。
为了减少这种情况,我需要并行运行此计算。因此,如果我并行运行4组数据,则应在250分钟左右完成。
但是问题是,一旦完成了这些计算,我就得到了一组需要存储到表中的数据,该表在其4列中具有一些主键约束。因此,在并行运行时,我预计会出现一些死锁问题。因此,我正在考虑将此数据写入具有相同列但没有主键或任何约束的临时表。
因此,我希望这里不会出现僵局。请在这方面提出建议,如果我的理解正确,请告诉我。谢谢你。
INSERT不能对INSERT同一表上的另一个进行死锁,因为同一表上的两个INSERT语句将始终以相同的顺序获取锁。话虽如此,我必须对你的发言发表评论:
INSERT
如果我并行运行4组数据,则应在大约250分钟内完成。
您没有理由期待这一点。首先,这样的要求表示您无视阿姆达尔定律。其次,SQL工作负载在内部 已经 是并行的,过程中的查询尽可能使用并行计划,请参见并行查询处理, 特别是 如果它包含许多“分组和求和”时。
最终,您面临的是优化任务。像其他优化任务一样进行处理,首先确定瓶颈。踏上这一旅程,必须阅读《等待和排队》。