对于SQL Server,如何修复同时并行表更新?

时间:2016-01-19 13:03:50

标签: sql sql-server sql-server-2014

我必须在150个表的两个(索引的)空列上更新所有记录(添加Guids),每个表包含大约50k条记录和4条现有列。

在我的本地计算机(16GB RAM,500GB Samsung 850,SQL Server 2014,核心i5)上,当我尝试并行运行10个表时,总共需要 13分钟,而如果我运行5该过程仅在 1.7分钟完成。

我确实知道某些东西在磁盘级别上很忙,但我需要一些帮助来量化这种巨大的时间差异。

是否有确切的SQL Server数据库视图,我可以检查这种差异?是否有一种确切的方法来确定给定的硬件可以并行运行多少表更新? (真正的测试服务器有更多的RAM和10k rpm的磁盘)。

有人能指出我可以在SQL Server上改进的东西,以改善并行运行10个表的时间吗?

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

修改

解决方案喜欢及其描述:

以下是执行更新的代码: enter image description here

现在代码已经改为一次做20k。

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

现在确实如此:

  1. 10(线程)X 20k更新查询= 200k同步更新查询
  2. 10(线程)X 20k更新查询= 200k同步更新查询
  3. 10(线程)X 10k更新查询= 100k更新查询
  4. 结果: 之前:13分钟之后:1.8分钟

    我现在正在检查以找出最佳(最快!)组合,以同时使用多个线程更新这150个表。可能我可以并行更新更多数量的表,同时更低的同步更新,如5k(从20k),但我现在将忙于测试。

1 个答案:

答案 0 :(得分:0)

找到解决方案。 :)

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