是否可以从Azure SQL DB上的缓存中删除单个执行计划?

时间:2018-03-27 06:02:11

标签: tsql azure-sql-database sql-execution-plan dbcc

结论

你做不到。 Microsoft明确声明:"您无法从缓存中手动删除执行计划" in this article called 'Understanding the Procedure Cache on SQL Azure'

原始问题

在SQL Server上,可以使用[DBCC FREEPROCCACHE(plan_handle varbinary(64))][1]从缓存中删除单个执行计划。有不同的[documentation about DBCC FREEPROCCACHE on SQL Azure][2]。它似乎从所有计算节点和/或控制节点中删除了所有缓存的执行计划(无论这些节点是什么,我都不知道)。我不明白为什么服务器版本的Azure上的SQL在这方面会有所不同。

但是,我正在寻找一种从Azure缓存中删除单个执行计划的方法。有没有办法删除Azure上的单个执行计划?也许使用查询而不是DBCC

1 个答案:

答案 0 :(得分:1)

无法从缓存中删除单个执行计划。

如果您的执行计划只与几个表/一个表相关,并且如果您也可以删除这些表的缓存,那么您可以更改表,添加非空列并删除列。这将强制刷新缓存..

更改表的模式会导致所涉及的表的缓存刷新(不是单一计划,所有计划)

  

我不明白为什么服务器版本的Azure上的SQL在这方面会有所不同。

这与数据库作为产品有关,你提供了一个数据库(这可能在一些服务器上有多个数据库)和一些dbcc命令影响整个实例,所以它们有点禁止所有DBCC命令。有一个新的提供称为Managed instance(与内部服务器相同,但Azure数据库的可用性很高),您可能也想检查它