2011-01-21 18 views
5

ストアドプロシージャのパフォーマンス(完了までの時間)を正確に測定する最良の方法は何ですか?ストアドプロシージャのパフォーマンスを正確に測定

私は、モンスターストアドプロシージャを最適化しようとしています。私の調整に影響があるかどうかを正しく判断するには、前と後を比較する必要があります。

これまでの私のアイデア:非常に正確ですが、非常に便利ではない:

  • は、クエリの実行時間SQL Management Studioを探しています。
  • ストアドプロシージャでタイマーを追加し、経過時間を印刷する:そのような悪臭のようなデバッグコードを追加する。
  • SQL Server Profilerを使用して、私のストアドプロシージャだけを対象とするフィルタを追加します。これはこれまでのところ私の最高の選択肢です。

他のオプションはありますか?

答えて

6

プロファイラが最も信頼性の高い方法です。 SET STATISTICS IO ONSET STATISTICS TIME ONを使用することもできますが、これらにはスカラーUDFの完全な影響は含まれていません。

SSMSの "クライアント統計を含める"オプションをオンにすると、過去10回の実行の概要を知ることができます。

+0

うん、IO、CPU、Durationなどをキャプチャする – gbn

+0

「クライアントの統計情報を含める」オプションも非常に役に立ちます。私はそれとプロファイラを使用します。ありがとう。 :) –

+0

SSMSに「クライアント統計を含める」ことは知らなかった。とても役に立ちました。 – kolin

1

タイマー/デバッグオプションの改善点は、結果を表に保存することです。このようにして、デバッグ出力を視覚的に解析するのではなく、結果のタイミングデータをSQLクエリでスライスアンドダイスすることができます。

+0

を見てみましょう。プロファイラをデータベースサーバー以外のサーバーで実行し、トレースの結果をファイルに保存します。この方法では、SQL Serverをロードせず、トレース結果に影響を与えません(正確であると仮定して)。 – Tony

+0

これはかなり巧妙で、いくつかのデバッグコードでspを浪費することさえ正当化するかもしれません。先端に感謝します。 :) –

8

これはあなたの累積パフォーマンスデータとキャッシュされた文ごとの実行カウントを与える

DECLARE @procname VARCHAR(255) 
SET @procname = 'your proc name' 

SELECT * FROM sys.dm_exec_query_stats WHERE st.objectid = OBJECT_ID(@procname) 

DMV dm_exec_query_statsで詳細なパフォーマンス情報がたくさんあります。

DBCC FREEPROCCACHEを使用すると、カウンターをリセットできます(キャッシュされたすべてのクエリプランをパージするため、運用システムでは実行しないでください)。

あなたはこのクエリを拡張することで、各ステートメントのクエリプランを取得することができます。

SELECT SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
     ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) [sub_statement] 
     ,*, CONVERT(XML, tqp.query_plan) 
FROM sys.dm_exec_query_stats qs CROSS APPLY 
    sys.dm_exec_sql_text(sql_handle) st CROSS APPLY 
    sys.dm_exec_query_plan(plan_handle) qp CROSS APPLY 
    sys.dm_exec_text_query_plan(plan_handle, statement_start_offset, statement_end_offset ) tqp 
WHERE st.objectid = OBJECT_ID(@procname) 
ORDER BY statement_start_offset, execution_count 

これはあなたのSPの部分がひどく実行されているかについてのポインタを与える、となります - あなたが実行計画が含まれている場合 - なぜ。

+0

動的管理ビューは私には新しくありますが、確かに私がチェックアウトするべきもののようです。ありがとう! –

+0

プロシージャのパフォーマンスの統計情報を取得するための非常に良いクエリ - ありがとう。 –

1

あなたは公正なテストを実行していることを確認したいと思います。テストを実行するたびにIOサブシステムからストアド・プロシージャの実行を強制的に実行するには、コールド・キャッシュを使用してテストを実行することを検討してください。

は私が反対するシステムストアドプロシージャDBCC FREEPROCCACHEDBCC FREESYSTEMCACHE

関連する問題