スポンサードリンク

SQLServer 実行プランを削除・再作成する

SQLServerで非効率な実行プランが作成されて
思ったようなパフォーマンスがでないことがままあります。
(最近はないのかな💦)

そんなときのために実行プランをキャッシュから削除する方法がある。
サーバの処理がスローダウンしてどうしようもない時に
緊急措置として対応したことがある。


1)インスタンスの実行プランをすべて削除する場合

-- 実行プランを全削除
-- #WITH NO_INFOMSGSは、不要な情報ログを
-- #出力しないオプション
DBCC FREEPROCCACHE WITH NO_INFOMSGS

2)特定の実行プランのキャッシュだけ削除する場合

-- 対象のプランを取得する
SELECT 
         p.plan_handle -- ハンドルID
	, p.usecounts
	, st.text
FROM sys.dm_exec_cached_plans p
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'%Member%';

-- 実行プランを部分削除
-- 対象のキャッシュを手動で削除
DBCC FREEPROCCACHE( [ハンドルID] ) WITH NO_INFOMSGS

3)特定のテーブルの実行プランの再作成を指定する
  次回実行時に実行プランが再作成される

-- 特定の対象テーブルの実行プランを再作成する
EXEC sp_recompile 'テーブル名称'; 

4)特定のストアドプロシージャの実行プランを再作成する

-- 特定のストアドプロシージャの実行プランを再作成する
EXEC sp_recompile 'プロシージャ名';