1

SQL Server でストアド プロシージャを手動で再コンパイルするにはどうすればよいですか? dropとのようなものcreateですか?

create statement のオプションを使用して実行できることはわかっており、(WITH RECOMPILE)実行ごとに再コンパイルされ、実行中sp_recompile @procedureNameは次回実行時にのみ再コンパイルされますが、これら2つのアプローチなしで手動で再コンパイルするにはどうすればよいですか?

4

2 に答える 2

3

ストアド プロシージャは、「最初に」実行されるときにコンパイルされます。「最初」の意味は、彼らには計画がありません。できることは、キャッシュを無効にすることだけです。SQL-Server では、呼び出す以外にコンパイルを強制する方法はありません。

(ところで、これはあなたがアイデアを得たかもしれないOracleとは異なります)

このアプリケーションでは、「ru​​n_sample_statements.sql」というスクリプトを維持しています。これには、コンパイルとキャッシュを発生させる代表的なクエリとプロシージャ コールが多数含まれています。メンテナンスとインデックスの再構築の後、ユーザー向けに再度リリースする前に、システムをテスト/事前キャッシュするために使用しました。

于 2014-09-02T13:31:38.960 に答える
0

それを行う 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 と同じです。

于 2014-09-02T12:21:45.413 に答える