我想要清除我的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 实例上的 Microsoft SQL Server 缓存。如何在不重启数据库实例的情况下实现?
简短描述
清除 SQL Server 缓存的方法有许多种,从非常精细的缓存清除到完整的缓存清除。您可以使用以下工具清除缓存。所有这些工具均可用于 SQL Server 的数据库控制台命令(DBCC):
解决方法
**注意:**最佳实践是先全面测试以下命令,然后再在生产环境中运行它们。测试有助于识别可能会在实施过程中发生的潜在问题。
确定使用的前五位缓存和内存
运行以下命令,以确定使用的前五位缓存内存:
SELECT TOP(5) name AS [Name],
SUM(pages_kb) AS [SizeKb]
FROM sys.dm_os_memory_cache_counters WITH (NOLOCK)
GROUP BY name
ORDER BY SizeKb DESC
从缓存中删除一个计划(参数嗅探问题)
运行以下命令以识别错误的计划:
SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid)
AS [DatabaseName], st.text
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text LIKE N'%[search string]%' OPTION (RECOMPILE);
运行以下命令之一以删除错误的计划:
DBCC FREEPROCCACHE (plan_handle);
或
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE [plan_handle];
从缓存中删除按需和准备好的计划
如果缓存中具有太多按需计划,请运行以下命令将其删除:
DBCC FREESYSTEMCACHE ('SQL Plans')
清除当前数据库的计划缓存
如果您运行的是 SQL Server 2016 或更高版本,请运行以下命令:
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
或
DBCC FREESYSTEMCACHE('DatabaseName')
如果您使用的是 SQL 2016 之前的 SQL Server 版本,请运行以下命令:
declare @dbid int = (select DB_ID())
DBCC FLUSHPROCINDB (@dbid);
清除所有缓存
DBCC FREESYSTEMCACHE('ALL')
或
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
**注意:**DBCC DROPCLEANBUFFERS 命令用于清除所有缓存和缓冲池。此命令在 Amazon RDS for SQL Server 中不受支持,因为它需要 sysadmin 固定服务器角色中的成员资格。