如何在不重新啟動 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 不支援此命令,因為它需要系統管理員固定伺服器角色的成員資格。


此文章是否有幫助?


您是否需要帳單或技術支援?