2016-04-13 13 views
1

私は、生のデータベースとスナップショットの使用の違いをタイミングしています。SQL Serverストアドプロシージャの正確なタイミングを取得するにはどうすればよいですか?

DECLARE @Loops INT SET @Loops = 1 
DECLARE @CPU INT SET @CPU = @@CPU_BUSY 
DECLARE @StartDate DATETIME SET @StartDate = GETDATE() 
DECLARE @SelectedValue int 

WHILE @Loops <= 100 
BEGIN 

    EXEC @SelectedValue = CashFlow.usp_CSF_Report_ProjectedExpendituresByFundingParticipant '7/1/1999' 
    IF @SelectedValue = 50 
      PRINT 1 
    SET @Loops = @Loops + 1 
END 

PRINT 'usp_CSF_Report_ProjectedExpendituresByFundingParticipant' 
PRINT 'Total CPU time: ' + CONVERT(varchar, @@CPU_BUSY - @CPU) 
PRINT 'Total milliseconds: ' + CONVERT(varchar, DATEDIFF(ms, @StartDate, GETDATE())) 
PRINT '' 

をしかし、私は、ストアドプロシージャでそれを実行したときに示したように、私は戻って結果セットを取得: 私は、このルーチンを使用してUDFとビューを時間を計ることができます。

結果を表示するのにかかる時間がタイミングの結果を無効にすることが懸念されます。

これをビューやUDFでラップしようとしましたが、ランダムなオーバーヘッドが増えないという方向での解決策はありません。

表示されないように結果をキャプチャまたは無視するにはどうすればよいですか?

+1

達成することは困難であること、スナップショットの場所とあなたのDBのようなあなたのタイミングを無効にする可能性がある条件がたくさんあります。あなたの時間の結果がまだ有効であると言うのに合理的な時間を考えてもらえませんか? – Licantropo

答えて

0

おそらくできることは、結果を表変数に挿入することです。したがって、クライアントには転送されません。もちろん、各呼び出しの間にそれを切り捨てる必要があります。

パフォーマンスチューニングを実行しようとしている場合は、SET STATISTICS IO ONとSET STATISTICS TIME ONを使用することを検討します。これは、論理ディスクの読み込み回数とCPU時間を示します。

また、実際のクエリ実行計画を見てください。私の経験では、どちらのクエリでも最も低い論理ディスクの読み込みが一般的に最も高速です。

+0

私はテンポラリテーブルを使うことを考えましたが、私はどのSPでも使えるより汎用的なソリューションを探していました。 私たちがそれを得るとき、パフォーマンスのタイミングのためのSET STATISTICSのヒントをありがとう。 – BWhite

関連する問題