sql-server - SQL Azure 上的 VarBinary(max) 更新速度非常慢

标签 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 应用服务运行,速度会非常慢。所以问题不是我们的互联网连接。

我知道在 SQL Server 中存储文件并不是首选的存储方式,Blob 存储通常是最佳解决方案,但我们有特殊原因需要这样做,所以我想将其排除在讨论之外;-)

在调查执行计划时,我发现“Table Spool”一直在占用时间,但我不确定为什么。以下是本地和 Azure 的执行计划。

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

谢谢克里斯

Execution On Prem SQL

Execution on SQL Azure

最佳答案

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

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

希望这有帮助。

关于sql-server - SQL Azure 上的 VarBinary(max) 更新速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911934/

相关文章:

sql-server - 数据库镜像: Cannot set witness in Microsoft SQL Server 2014 using Azure

sql-server - 将 DbVisualizer 与 Azure SQL 结合使用的数据库驱动程序是什么?

sql-server - 如何使用 NTILE 函数更新表中的值?

sql - 以两种不同的方式汇总数据

sql - 为个人用户选择不同的 MAX NoteID

tsql - SQL Server 2000 “Incorrect syntax near the keyword ' CASE'”

sql-server - 奇怪的 WHERE col = NULL 行为

asp.net - Azure 应用服务无法访问 Azure SQL DB,但本地计算机可以工作。允许所有 IP 规则已到位。

mysql - MySQL 和 MS SQL 语言之间的主要区别是什么?

sql - 在 SSRS 查询中显示从日期开始的年月