SQL Azure 上的 VarBinary(max) 更新非常慢
VarBinary(max) updates very slow on SQL Azure
我们将一些文档存储在 SQL 服务器数据库 VarBinary(Max)
列中。大多数文档只有几 KB,但有时可能只有几 MB。
我们 运行 遇到文件大于 4MB 的问题。
在本地 SQL 服务器中更新 VarBinary
列时,速度非常快(8MB 文件为 0.6 秒)。
在 SQL Azure 上的相同数据库上执行相同的语句时,需要超过 15 秒!
此外,如果代码是 运行来自 Azure 应用服务的,它会非常慢。所以问题不是我们的 Internet 连接。
我知道在 SQL 服务器中存储文件不是首选的存储方式,Blob 存储通常是最好的解决方案,但我们有特殊原因需要这样做,所以我想忽略它讨论 ;-)
在调查执行计划时,我看到 "Table Spool" 占用了所有时间,我不确定为什么。以下是本地和 Azure 的执行计划。
相同的数据库和数据。如果有人能帮忙,那就太好了。
谢谢克里斯
table 假脱机运算符正在缓存要更新的行(在 tempdb 中),然后将其提供给 Table 更新运算符,假脱机运算符是数据库引擎正在执行更新操作的标志大量写入(8 KB 页)到 TempDB。
对于 I/O 密集型工作负载,您需要扩展到高级层。在基本层和标准层,这些更新不会有很好的性能。
希望对您有所帮助。
我们将一些文档存储在 SQL 服务器数据库 VarBinary(Max)
列中。大多数文档只有几 KB,但有时可能只有几 MB。
我们 运行 遇到文件大于 4MB 的问题。
在本地 SQL 服务器中更新 VarBinary
列时,速度非常快(8MB 文件为 0.6 秒)。
在 SQL Azure 上的相同数据库上执行相同的语句时,需要超过 15 秒!
此外,如果代码是 运行来自 Azure 应用服务的,它会非常慢。所以问题不是我们的 Internet 连接。
我知道在 SQL 服务器中存储文件不是首选的存储方式,Blob 存储通常是最好的解决方案,但我们有特殊原因需要这样做,所以我想忽略它讨论 ;-)
在调查执行计划时,我看到 "Table Spool" 占用了所有时间,我不确定为什么。以下是本地和 Azure 的执行计划。
相同的数据库和数据。如果有人能帮忙,那就太好了。
谢谢克里斯
table 假脱机运算符正在缓存要更新的行(在 tempdb 中),然后将其提供给 Table 更新运算符,假脱机运算符是数据库引擎正在执行更新操作的标志大量写入(8 KB 页)到 TempDB。
对于 I/O 密集型工作负载,您需要扩展到高级层。在基本层和标准层,这些更新不会有很好的性能。
希望对您有所帮助。