我想清除 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 不支援此命令,因為它需要系統管理員固定伺服器角色的成員資格。