web-dev-qa-db-ja.com

ストアドプロシージャの実行時間が長すぎる

SQL Server 2008を使用しています。SQLServerプロファイラーで監視していると、たとえば20秒かかるクエリがいくつか見つかりました。 SQL Server Management Studioで同じクエリを(ストアドプロシージャで)実行すると、2秒かかります。メモリとCPUが20%のクエリをキャッチすると、SQL Serverに負荷がかかります。

私は何ができますか?

4
SilverDeveloper

ストアドプロシージャの実行時間とインラインSQLの実行時間を比較するときは注意してください。

ストアドプロシージャは1つの実行プランにコンパイルされ、可能なすべてのパラメーターに適合します。クエリによっては、これはすべてのパラメーターに対して適切な計画ではない可能性がありますが、代わりにすべてのパラメーターの中で最悪です。

Inlineを実行すると、オプティマイザーはクエリとパラメーターの両方を確認できます。その後、そのケースに特化した計画を作成できます。 OR @param IS NULLなどの条件を取り、それをOR TRUEに変換してから、具体的にそれに適合するインデックスとアプローチを選択できます。

つまり、インラインプロシージャとストアドプロシージャは、さまざまなパフォーマンス特性を持つさまざまなプランを生成できます。

特定のケースについて、ストアドプロシージャの定義を教えていただけますか?

4
MatBailie

これは、クエリプランが「ひどく間違っている」という過去に見たことがあります。SSMSからアプリケーション(.Netで作成されたものなど)経由で実行する場合は、異なるクエリプランを使用することを覚えておく価値があります。

SQLサーバーにリンクサーバーがある場合、これを実証できます。 「実際の」サーバーに接続し、高速に実行されることを確認します。リンクサーバーに再接続して再度実行すると、パフォーマンスの違いがわかります。

0
Rowland Shaw

これはSQL Server 2000用でしたが、おそらくあなたのケースに適用されます: https://stackoverflow.com/questions/440944/sql-server-query-fast-but-slow-from-procedure

それは反対の状況でしたが、おそらくANSI NULLSに問題があるのでしょうか?

0
BartekR