我可以清理某些指定数据库的缓冲区而不是整个sql server

时间:2011-04-06 10:27:35

标签: sql-server caching dbcc

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

FREEPROCCACHEDBCC FREEPROCCACHE

无法实现

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

  

DBCC FREEPROCCACHE此命令从内存中删除所有缓存的计划   DBCC FLUSHPROCINDB(<dbid>)此命令允许您指定a   特定的数据库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);