如何在不重启 RDS for SQL Server 实例的情况下清除缓冲区缓存或其他缓存?

上次更新日期:2022 年 10 月 13 日

我想要清除我的 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 固定服务器角色中的成员资格。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?