我们发现在我们的服务器上插入速度非常慢(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左右。
我发现我可以将插入放入事务中,它可以解决问题。仍然不确定为什么磁盘速度如此之低。
答案 0 :(得分:0)
如果我理解正确,则从本地工作站连接到Azure基础架构中托管的远程数据库。还有一个额外的方面,您必须考虑网络延迟。看起来您的脚本将每个插入作为sperate请求发送。您每隔一行数据发送一个请求,等待Azure响应的时间,然后发送下一条记录。
尝试为此多插入
使用不同的语法INSERT INTO wtListingExpand VALUES
('a24f0628-dc91...', 7747)
,('a24f0628-dc91...', 7747)
,('a24f0628-dc91...', 7747)
这应该将所有数据作为一个大插入请求发送,并减少网络延迟的影响。