2011-12-16 3 views
0

私はストアドプロシージャの調整に取り組んでいます。これは巨大なストアドプロシージャであり、約6〜700万レコードのテーブルを結合します。SQL Serverクエリのサブコンポーネントが取得する時間

私の質問は、どのようにprocのコンポーネントで費やされた時間を決定するかです。 procには1つの大きな選択肢があり、オンザフライで作成された多くの一時表があります(サブクエリを読み込みます)。

SET STATISTICS TIME ON、SET SHOWPLAN_ALL ONを試してみました。

私は、最も時間がかかり、やり方がわからないコードを分離することを検討しています。

助けてください。

PS:私はそれをgoogleにしようとしました、Stackoverflowで検索しました..........運がいいえ。ここで私が見た1つの質問です。 How to improve SQL Server query containing nested sub query

本当にありがとうございます。前もって感謝します。

答えて

2

SQL SentryのSQL Plan Explorerを試してみます。それはあなたに問題を見つける際に視覚的な助けを与えます。それはまた無料のツールです。これは、一般的なパーセンテージに対して、多くのI/OまたはCPUを要するビットを強調表示します。あなたはそれをチェックアウトすることができますのはここ

です: http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp

エリック

+0

+1 - それは素晴らしいツールです。 – JNK

+0

+1も私から。有望なツールに見えます。さらに探求します。 – AlwaysAProgrammer

+0

ちなみに、実際のプランを取得した場合、影響を受ける実際の行などを取得できます。これは、単なる見積もりプランよりも便利です。あなたは実行する前に + Mを打ってSSMSでこれを行うことができます。 – Anon246

0

「時間」(どれくらい長く)を求めるのか気づいていますが、「何か」に集中する必要があります。私が意味することは、実行計画の結果に調整することです。理想的には、 "Show Execution Plan"を使うことは、あなたに最大のブーイングを与えるでしょう。それは、最も多くのリソースを消費するパーセンテージによって、あなたに伝えます。 SSMS 2008の場合は、クエリウィンドウで右クリックし、[実行計画を含める]をクリックします。

+0

**これは非常に間違っている**パーセントは推計ではなく、実績に基づいており、彼らは**時間がありません。成分**。これらはIO/CPU /メモリに基づいていますが、まったく時間をかけていません。実際には、最も高価なオペレータが最速である可能性があります。 – JNK

+0

より明確にするために、時間から「コスト」に更新しました。しかし、私はあなたの答えが分からないと思います。質問者は時間を求めていた。クエリの時間は理想的なチューニングメトリックではありません。実際の実行計画を活用することで、この人が探している洞察が得られます。 また、「最も高価なオペレータが実際に最速である可能性があります」と説明してください。計画自体に関連していますか?どの実行計画においても、「最も高価なオペレータ」が存在するだろう。 –

+0

時間がクエリに費やされることが最も懸念される場合は、時間が最も適切な方法です。彼のシナリオはわからない。並行性がない可能性があり、ETLをビルドした後の作業である可能性があります。そこで、自分自身にサーバーを持っています。 – JNK

0

このシナリオでは、コンポーネントを個別に実行するのが最良の方法です。以下のことは、実行時間のチューニング(主に低コンティンジェンシー/同時実行環境)に関係することに注意してください。重度の同時負荷の下で、他の優先順位を持つことができます。

私は調整しなければならないさまざまな手順のために、定期的に非常に似たような細分化を行う必要があります。原則として、私は従う一般的な方法論は、次のとおりです。

1 - ベースラインの実行

2を実行してください - 最長を取るのステップた特定に役立ち、現在の時刻を返し部分の間PRINTRAISERRORコマンドを追加します。

3 - クエリを個別に分割します。私は通常、自分自身で部分を実行します(JOINの条件を省略します)。非常に長時間実行されているクエリの場合は、いずれのSELECTにも返り値を制限するためにTOP句を追加できます。あなたが一貫している限り、これはあなたに良いアイデアを与えるでしょう。

4 - 最も時間がかかるステップ3のコンポーネントを微調整します。複雑なサブクエリがある場合は、#tempテーブルをインデックス化して、それが役立つかどうかを確認してください。 CTEは、原則としてパフォーマンスに役立つものではないため、それらも同様に実現する必要があります。

関連する問題