了解和优化 SQL Server 中多个数据库的重复查询哈希

Jus*_*ner 3 sql-server execution-plan

我正在使用托管数千个数据库的 SQL Server 实例。每个数据库对应不同的客户,但它们都共享相同的模式。

最近,我观察到许多查询具有相同的查询哈希。经过进一步调查,我发现虽然查询具有相同的文本,但它们是针对不同的数据库执行的。

据我了解,由于每个查询的上下文都是特定于数据库的,因此重复的查询哈希是可以预料的。不过,我很想知道我的理解是否正确。

此外,我有兴趣探索优化此设置的选项。具体来说,是否有一种方法可以整合不同数据库之间相同查询的执行计划,或者由于不同的数据库上下文而无法实现这一点?

任何有关此事的见解或建议将不胜感激。

预先感谢您的帮助!

Eri*_*ing 8

没有

这是任何多租户解决方案都会遇到的问题,无论是按数据库还是按架构进行分离。不过,我并不是建议您仅仅为了计划缓存而混合客户端。

对于性能故障排除,最好使用针对每个数据库的查询存储。它并不是计划缓存的替代品(尽管我希望如此),但是在这种情况下,您无能为力,因为数千个数据库都运行类似的工作负载。

不同的数据库可能有不同的设置、不同的索引,当然也会有不同的统计信息。无论如何,您确实不希望在所有人之间共享计划,并且在某些情况下这在技术上是不可能的。如果搜索一个数据库中存在但另一个数据库中不存在或存在于截然不同的分布中的一组标识符,基数估计将是完全错误的。

举个例子,我并不是说您的数据库就是这种情况,不同的 ANSI 设置可能会使某些查询在一个数据库中失败,而在另一个数据库中可以正常工作。