【问题标题】:can i cleanup buffer for some specified database instead of the entire sql server我可以为某些指定的数据库而不是整个 sql server 清理缓冲区吗
【发布时间】:2011-04-06 10:27:34
【问题描述】:

据我所知,如果我执行“DBCC FREEPROCCACHE”和“DBCC DROPCLEANBUFFERS”,整个服务器的缓冲区将被清理。 我想知道是否有办法只清理指定数据库的缓冲区。因此,对其他数据库的查询不会受到影响。

【问题讨论】:

  • 不,你不能 - 这些是系统/服务器范围的命令,并且没有针对每个数据库的等效命令

标签: sql-server caching dbcc


【解决方案1】:

您可以使用DBCC FLUSHPROCINDB(<db_id>) 清除单个数据库中的所有执行计划。我不知道有任何类似的命令可以从缓冲区缓存中清除特定页面。

但是,如果情况允许,您可以暂时将数据库设置为离线,然后再重新在线以清除数据库的计划和缓冲区缓存。

【讨论】:

    【解决方案2】:

    FREEPROCCACHEDBCC FREEPROCCACHE 不可能

    根据 msdn https://msdn.microsoft.com/en-us/library/cc293622.aspx

    DBCC FREEPROCCACHE 此命令从内存中删除所有缓存的计划 DBCC FLUSHPROCINDB (<dbid>) 这个命令允许你指定一个 特定的数据库 id,然后清除该特定的所有计划 数据库。

    db id 可以这样获取

    DECLARE @intDBID INT;
    SET @intDBID = (SELECT [dbid] 
                    FROM master.dbo.sysdatabases 
                    WHERE name = 'AdventureWorks');
    
    -- Flush the procedure cache for one database only
    DBCC FLUSHPROCINDB (@intDBID);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 2021-06-23
      • 2013-08-04
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多