【发布时间】:2011-04-06 10:27:34
【问题描述】:
据我所知,如果我执行“DBCC FREEPROCCACHE”和“DBCC DROPCLEANBUFFERS”,整个服务器的缓冲区将被清理。 我想知道是否有办法只清理指定数据库的缓冲区。因此,对其他数据库的查询不会受到影响。
【问题讨论】:
-
不,你不能 - 这些是系统/服务器范围的命令,并且没有针对每个数据库的等效命令
标签: sql-server caching dbcc
据我所知,如果我执行“DBCC FREEPROCCACHE”和“DBCC DROPCLEANBUFFERS”,整个服务器的缓冲区将被清理。 我想知道是否有办法只清理指定数据库的缓冲区。因此,对其他数据库的查询不会受到影响。
【问题讨论】:
标签: sql-server caching dbcc
您可以使用DBCC FLUSHPROCINDB(<db_id>) 清除单个数据库中的所有执行计划。我不知道有任何类似的命令可以从缓冲区缓存中清除特定页面。
但是,如果情况允许,您可以暂时将数据库设置为离线,然后再重新在线以清除数据库的计划和缓冲区缓存。
【讨论】:
FREEPROCCACHE 或 DBCC 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);
【讨论】: