0

ストアドプロシージャは、最初の使用時にコンパイルされます。

キャッシュをクリアするオプションがあります。

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
--To Verify whether the cache is emptied
--DBCC PROCCACHE

または再コンパイルするか、再コンパイルを減らします。

しかし、頻繁に使用されるストアドプロシージャの実行プランを強制的にキャッシュして、メモリに保持することは可能ですか?

私はADO.NETで、つまりSQL Serverの外部からそれを行う方法を知っていますが、この質問はSQLServerの内部で行う方法です-SQLServer自体の起動時に起動されます。

(*)たとえば、SSMSアクティビティモニターに、SQL Serverエージェントが無効でSQLが無効になっているにもかかわらず、tempdbデータベースのコンテキストでT-SQL(プロファイラーによる)を継続的に実行している実行中のプロセス(タスク状態:RUNNING、コマンド:SELECT)が表示されますサーバーには何もロードされていません。「これらのSQLServerセッションはどこから来たのですか? 」の「セッション54の詳細」を参照してください。

ストアドプロシージャを定期的にリサイクルする同様の常駐プロセス(または、SQL Serverの開始サービスまたはセッションによる自動開始)をどのように実行しますか?

関連する質問:
ストアドプロシージャは、最初の実行時に実行が遅くなります

更新:
2でこの質問をフォークする必要があったかもしれませんが、私の主な好奇心は、SQL Serverエージェントを無効にして定期的/ループアクティビティを実行する方法ですか?
上記のRUNNINGSELECTセッション(*)でどのように作成されましたか?

Update2:
大量のデータを読み取る必要があるだけでは説明できない、非常に少量のデータをクエリするストアドプロシージャの実行中に、かなりの遅延が頻繁に発生します。

この質問のコンテキストとして、これ(わずかに小さいデータでのかなりの遅延)を考慮することができますか?

4

2 に答える 2

0

スクリプトから実行するだけです。これは、SQLサーバーの再起動後に実行できます。頻繁に使用する場合は、その後はそれほど問題にはなりません。

于 2010-10-26T11:25:42.987 に答える
0

この質問は最終的に次のように回答されたようです。

更新:これらのヒントはトリックを行います:

于 2010-11-03T11:30:00.903 に答える