【问题标题】:Is it possible to delete a single execution plan from cache on Azure SQL DB?是否可以从 Azure SQL DB 的缓存中删除单个执行计划?
【发布时间】:2018-09-05 10:03:15
【问题描述】:

结论

你不能。微软明确声明:“您不能手动从缓存中删除执行计划”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

【问题讨论】:

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


    【解决方案1】:

    没有办法从缓存中删除单个执行计划。

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

    更改表的架构会导致所涉及的表的缓存刷新(不是单个计划,所有计划)

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

    这与作为产品的数据库有关,为您提供了一个数据库(这可能在具有多个数据库的某些服务器中)并且某些 dbcc 命令会影响整个实例,因此它们有点禁止所有 DBCC 命令。有一个新的名为 Managed instance 的产品(与本地服务器相同,但具有高可用性的 Azure 数据库),您可能还想检查一下

    【讨论】:

    • 很高兴看到一个链接指向描述为什么这在 Azure 上不可能的信息。拥有一种类似 hack 的替代方法来将执行计划标记为过时,或者在您放置缓存时刷新缓存也很棒。
    • 我们也在迁移到托管实例,如果您只有一个数据库,那么 azure db 很适合,除了托管实例可能更好
    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2014-06-20
    • 2012-02-18
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多