服务器上的插入速度慢但本地计算机上的速度很快

时间:2018-05-16 00:59:55

标签: sql sql-server database database-performance

我们发现在我们的服务器上插入速度非常慢(40+秒),但是当我们在本地计算机上使用相同的DB和相同的插入脚本时,它几乎是即时的。

我们的服务器托管在Microsoft Azure上,但我们也在我们大楼的服务器上尝试过,而且速度也很慢。

插入脚本只有大约5000个插入,但服务器上需要40多秒。 This happens on all tables, but the one we are testing on has 2 columns, no keys, no constraints, no triggers and no indexes.

如图here所示,插入脚本在我们的服务器上花了43秒,但在local machines上,它只需要1秒钟。虽然索引达到7761,但它实际上不到5000 INSERT INTO语句。

这对我们的一些客户造成了相当大的减速,在很多情况下我们会向10000条记录插入更多的记录,因此加载页面需要1-2分钟。

我尝试过不同版本的SQL服务器和3个不同的服务器(Windows 2012上有2个,Windows 2016上有1个)。从另一台计算机在我们的计算机上运行插入脚本仍然具有~1的插入速度。

我认为这可能是因为我们的计算机有SSD而服务器有硬盘,但是我把它安装在有硬盘的笔记本电脑上,但仍然有~1秒的插入时间。

我不确定还有什么可以寻找,因为我能看到的唯一区别是服务器运行的是Windows 2012/2016,但我们的计算机都在Windows 10上。

还有什么可能导致这种情况,因为我发现Windows版本不太可能造成这种情况。似乎SQL服务器中有一些设置导致插入速度变慢。

编辑:

问题的原因似乎是服务器上的磁盘速度很慢。它们具有更多功能,但由于某种原因,它们最大速度大约为1MB / s,而我们的计算机在运行插入查询时速度达到30MB / s左右。

我发现我可以将插入放入事务中,它可以解决问题。仍然不确定为什么磁盘速度如此之低。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则从本地工作站连接到Azure基础架构中托管的远程数据库。还有一个额外的方面,您必须考虑网络延迟。看起来您的脚本将每个插入作为sperate请求发送。您每隔一行数据发送一个请求,等待Azure响应的时间,然后发送下一条记录。

尝试为此多插入

使用不同的语法
INSERT INTO wtListingExpand VALUES
  ('a24f0628-dc91...', 7747)
 ,('a24f0628-dc91...', 7747)
 ,('a24f0628-dc91...', 7747)

这应该将所有数据作为一个大插入请求发送,并减少网络延迟的影响。