3

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

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

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

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

此外,如果代码是从 Azure 应用服务运行的,它会非常慢。所以问题不在于我们的互联网连接。

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

在调查执行计划时,我看到一个“表假脱机”一直在占用,我不知道为什么。以下是 on prem 和 Azure 的执行计划。

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

谢谢克里斯

在 Prem SQL 上执行

在 SQL Azure 上执行

4

1 回答 1

4

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

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

希望这可以帮助。

于 2017-10-24T16:00:29.090 回答