Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server インスタンスの Microsoft SQL Server キャッシュをクリアしたいと考えています。DB インスタンスを再起動せずにこれを行うにはどうすればよいですか?
簡単な説明
SQL Server のキャッシュをクリアするには、きめ細かなキャッシュクリアからフルキャッシュクリアまで、複数の方法があります。次のツールを使用してキャッシュをクリアできます。これらのツールはすべて、SQL Server のデータベースコンソールコマンド (DBCC) で使用できます。
解決方法
注: 次のコマンドを本番稼働用環境で実行する前に、十分にテストするのがベストプラクティスです。テストは、実装中に発生する可能性のある問題を特定するのに役立ちます。
上位 5 つのキャッシュと使用メモリを特定する
次のコマンドを実行して、上位 5 つのキャッシュと使用メモリを特定します。
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
キャッシュから 1 つのプランを削除する (パラメータスニッフィングの問題)
次のコマンドを実行して、不適切なプランを特定します。
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 コマンドは、すべてのキャッシュとバッファプールをクリアするために使用されます。このコマンドは、sysadmin 固定サーバーロールのメンバーシップを必要とするため、Amazon RDS for SQL Server ではサポートされていません。