1

実際には、データベースからトランザクション データをアーカイブし、同じサーバー内の DW データベースに転送するために使用するストアド プロシージャがあります。

SSMS でストアド プロシージャを実行すると、完了するまでに約 2 ~ 2.5 分かかります。ただし、Windows アプリケーション (バッチ ジョブ) を使用してストアド プロシージャを呼び出そうとすると、完了するまでに約 30 分かかりました (同じパラメーター)。

時差にビックリしたのでこれが普通なのかと思っていました。

ありがとう!

4

1 に答える 1

0

これは、SQL サーバーが 2 つの実行計画をキャッシュに保存したためです。何かをクエリすると、SQL Serverはこれを行います

  • 現在の設定でキャッシュに実行計画はありますか?
  • 最良のクエリプランを推測するために提供されたパラメータを使用して作成しない場合

ado.net クライアントは、設定 ARITHABORT を Off に設定し、SSMS を On に設定してクエリを実行するため、SQL Server には 2 つの実行プランがあります。

SSMS とコードで同じ状態にしたい場合は、[ツール] -> [オプション] -> [クエリの実行] -> [SQL Server] -> [詳細設定] -> [SET ARHABORT] のチェックを外します (このパラメーターは役に立ちません)。

ソース: http://www.sommarskog.se/query-plan-mysteries.html (これについて読んだ中で最高の記事)

于 2013-02-08T15:11:24.717 に答える