对于 SQL 服务器,如何修复同时并行 table 更新?

For SQL Server, how to fix simultaneous parallel table updates?

我必须更新 150 table 秒的两个(索引)空列上的所有记录(添加 Guid),每个 table 有大约 50k 条记录和恰好 4 个现有列。

在我的本地机器上(16GB RAM,500GB Samsung 850,SQL Server 2014,core i5)当我尝试并行 运行 10 tables 时,总共需要13 分钟,而如果我 运行 5,则该过程仅需 1.7 分钟

我知道磁盘级别上有些事情很忙,但我需要一些帮助来量化这种巨大的时间差异。

是否有确切的 SQL 服务器数据库视图,我可以检查此差异?有没有一种确切的方法可以计算出对于给定的硬件,我可以 运行 并行进行多少 table 更新? (真实测试服务器有更多的 RAM 和 10k rpm 的磁盘)。

任何人都可以指出我可以在 SQL 服务器上改进的地方,以改进 运行ning 10 table 并行的计时吗?

我已经尝试将自动增长大小从 10MB 增加到 100MB,这增加了磁盘队列长度(从大约 5 到 0.1),但它实际上并没有减少总时间。

编辑:

解决方案喜欢及其描述:

这是执行更新的代码:

现在代码已经改成单次做20k

所以基本上以前是 运行ning 10(线程)X 40k 更新查询 = 400k 同步更新查询在第一个 运行 然后是其余的 10(线程)X 10k 更新查询,更新这 10 种不同类型的所有 50k 记录。

而且,现在可以了:

  1. 10(线程)X 20k 更新查询 = 200k 同时更新查询
  2. 10(线程)X 20k 更新查询 = 200k 同时更新查询
  3. 10(线程)X 10k 更新查询 = 100k 更新查询

结果: 前: 13 分钟, 之后:1.8 分钟

我现在正在检查以找出最佳(最快!)组合来同时使用多个线程更新这 150 个 tables。也许我可以同时更新更多的 tables 和较低的同步更新,如 5k(从 20k),但我现在将忙于测试它。

找到解决方案。 :)

而不是 运行 一次 40K 更新查询(我创建了一个 40k 更新语句的更新脚本,如上面的评论所述)如果我将该数字减少到一半 - 20k 更新查询一旦有了巨大的改进——10 个并行表现在总共需要 1.3 分钟——我现在可以继续了。 感谢您到目前为止的投入和帮助。