我们遇到了一个有趣的性能问题。我们发现在我们的开发环境中运行了大约 6 秒的查询。但是,当部署到生产环境(相同的数据/相同的硬件)时,它的执行时间大约为 36 秒。经过对比和并排测试(确认所有设置都相同),似乎唯一的区别是开发使用开发者版,生产使用标准(SQL Server 2019都打了完整补丁)。
我怀疑开发中可用的一些功能(即企业版)正在导致开发中的性能优势,但我不知道从哪里开始。我对此相当有信心,因为我配置了一个单独的服务器,在开发中进行了测试(6 秒),使用 Standard 重新安装,结果达到了 37。
哪些特征可能导致这种差异?我希望知道它会帮助我在标准版中更多地调整这个查询的性能(目前它非常丑陋),因为我们负担不起生产中的企业。
开发执行计划: 计划
生产执行计划: 计划
在 Dev 上,您可以获得批处理模式。Dev 不受限制,它具有与 Enterprise 相同的功能集。其中之一是不涉及列存储索引的批处理模式。在批处理模式下,操作员一次处理大约 1000 行,而不是一行。显然,仅此一项就足以在 Dev Ed 上足够快地获得更简单的计划。
由于批处理模式,这个更简单的计划导致更有效的聚集索引扫描操作发生在需要在您的 查询中处理的约 280 万行MAT_VIEW_ADVERTISING_TARGET_BASE,而聚集索引查找发生在相同数量的行上生产中不太理想的计划。批处理模式聚集索引扫描似乎更适合您的数据和从上述数据集处理的数量。