在SQL Azure上,VarBinary(max)更新速度非常慢

时间:2017-10-24 13:33:29

标签: sql-server tsql azure-sql-database query-performance azure-sql-server

我们将一些文档存储在SQL Server数据库VarBinary(Max)列中。大多数文档都是几KB,但有时可能只有几MB。

当文件大于4MB时,我们遇到了问题。

更新本地SQL Server中的VarBinary列时,速度非常快(8MB文件为0.6秒)。

在SQL Azure上的相同数据库上执行相同的语句时,需要超过15秒!

此外,如果代码是从Azure App Service运行的,那么速度非常慢。因此,问题不在于我们的互联网连接。

我知道在SQL Server中存储文件不是首选的存储方式,而Blob存储通常是最好的解决方案,但我们有特殊的理由需要这样做,所以我想把它留在讨论之外;-)

在调查执行计划时,我看到一个" Table Spool"花时间,我不知道为什么。以下是on prem和Azure的执行计划。

相同的数据库和数据。如果有人可以提供帮助,那就太棒了。

谢谢Chris

Execution On Prem SQL

Execution on SQL Azure

1 个答案:

答案 0 :(得分:4)

表假脱机操作符正在缓存要更新的行(在tempdb中),然后将其提供给表更新操作符,假脱机操作符表示数据库引擎正在执行大量写入(8 KB页) TempDB的。

对于I / O密集型工作负载,您需要扩展到高级层。在基本层和标准层上,这些更新的性能不会很好。

希望这有帮助。