SQL Server でストアド プロシージャを手動で再コンパイルするにはどうすればよいですか? drop
とのようなものcreate
ですか?
create statement のオプションを使用して実行できることはわかっており、(WITH RECOMPILE)
実行ごとに再コンパイルされ、実行中sp_recompile @procedureName
は次回実行時にのみ再コンパイルされますが、これら2つのアプローチなしで手動で再コンパイルするにはどうすればよいですか?
SQL Server でストアド プロシージャを手動で再コンパイルするにはどうすればよいですか? drop
とのようなものcreate
ですか?
create statement のオプションを使用して実行できることはわかっており、(WITH RECOMPILE)
実行ごとに再コンパイルされ、実行中sp_recompile @procedureName
は次回実行時にのみ再コンパイルされますが、これら2つのアプローチなしで手動で再コンパイルするにはどうすればよいですか?
ストアド プロシージャは、「最初に」実行されるときにコンパイルされます。「最初」の意味は、彼らには計画がありません。できることは、キャッシュを無効にすることだけです。SQL-Server では、呼び出す以外にコンパイルを強制する方法はありません。
(ところで、これはあなたがアイデアを得たかもしれないOracleとは異なります)
このアプリケーションでは、「run_sample_statements.sql」というスクリプトを維持しています。これには、コンパイルとキャッシュを発生させる代表的なクエリとプロシージャ コールが多数含まれています。メンテナンスとインデックスの再構築の後、ユーザー向けに再度リリースする前に、システムをテスト/事前キャッシュするために使用しました。
それを行う 1 つの方法は、クエリを実行してプラン ハンドルを見つけることです。
Select st.Plan_handle
from
sys.dm_exec_cached_plans
CROSS APPLY
sys.dm_exec_sql_text(plan_handle) st
WHERE text like '% your proc name %'
次に DBCC FREEPROCCACHE (plan_handle)
このメソッドは実質的に sp_recompile と同じです。