2009-08-06 2 views
5

SQL Server Management Studioを使用しています。データを出力せずにSQL Server Mgmt Studioでパフォーマンスをテストするにはどうすればよいですか?

結果ウィンドウがテストに影響を与えずに、大きな選択(たとえば600k行)のパフォーマンスをテストするにはどうすればよいですか?両方のクエリーが同じ場所に出力されるため、すべてのものが同じであることは重要ではありません。しかし、私はテストサイクルをスピードアップしたいと思っています。私は、SQL Server Management Studioの出力設定が途中で変化していると考えています。テキストを出力することは、私が現在使っていることですが、私はよりよい選択肢を望んでいます。

データベースがローカルボックスにあるため、これは自分の数値に影響していると思います。

編集:ここで1 = 0とすることについての質問がありましたが(結合は起こりますが出力はないと思っています)、テストしても機能しませんでした。

答えて

10

クエリの前にSET ROWCOUNT 1を実行できます。私はそれがあなたが望むものであるかどうかは確かではありませんが、多くのデータが返されるのを待たずに正確な計算コストを得ることができます。

ただし、add Client Statistics to your queryの場合、数字の1つはサーバー応答の待機時間で、サーバーの計算時間にネットワーク経由でデータを転送する時間は含まれません。

+0

本当にありがとう! – jcollum

+0

'SET ROWCOUNT 1 'のコストは、この値がない場合とは全く異なる場合があります。最初の行が返された後に実行が停止するので、真のコストが報告され、計画は 'ROWCOUNT 'の有無に応じて異なる場合があります。 –

0

あなたができる最善のことは、実際のクエリのクエリ実行プラン(プレスはCtrl +L)をチェックすることです。これにより、利用可能なパフォーマンスのための最良の推測が得られます。

+0

これは、実際の数字を私に相対的なコストを与えることはなくなりますがあります。私はパフォーマンスをテストするために実際の数値が必要です。 – jcollum

0

私はWHERE 1=0のwhere句が、確実にManagement StudioではなくSQL Server側で起こっていると思います。結果は返されません。

Mgmt Studioを実行しているのと同じマシンにDBエンジンをインストールしていますか?あなたは可能性が

  • 出力をテキストにまたは
  • 出力はファイルに。
  • クエリ結果ウィンドウを閉じます。

これは、Mgmt Studioでグリッドを描画するのに費やされたサイクルを移動させるだけです。おそらく、テキストへの再考は、全体的により効果的になるでしょう。ペインを非表示にすると、Mgmt Studioでデータを描画する必要がなくなります。それはまだMgmt Studioに返されているので、本当に多くのサイクルを節約しているわけではありません。

+0

ええ、WHERE 1 = 0はテストが簡単で実行できませんでした。ローカルのボックスにSQL ServerとMgmt Studioを実行しています。 – jcollum

2

SET STATISTICS TIME ONでサーバーの時間を測定できます。また、SSMSのQuery/Include Client Statistics(Shift + Alt + S)を使用して、クライアント時間の使用に関する詳細情報を取得することができます。 SQLクエリは実行されず、結果がクライアントに返されますが、代わりにを実行してとして結果を返し、通信チャネルがいっぱいの場合は実行を中断します。

クエリーが結果パケットをクライアントに送り返すことを完全に無視する唯一のコンテキストは、アクティブ化です。しかし、パフォーマンスを測定するときには、出力をクライアントに返す時間も考慮する必要があります。あなた自身のクライアントがSSMSより速くなると確信していますか?

1

結果を出力しないと、クエリのパフォーマンスをどのようにテストできますか?テストがどのようにしてクエリが実行されるかについて何も教えていない場合、テストのスピードアップは無意味です。あなたは本当にクエリのこの犬があなたがそれを撫でた後にデータを返すために10分かかることを知りたいですか?

もちろん、60万レコードを返すには時間がかかるでしょう。それはあなたのユーザーインターフェイスでも同様に、情報がネットワークを経由しなければならないため、クエリウィンドウより長くかかることがあります。

+0

問題のクエリーは決してプロダクトには行かず、UIで決して使用されません。 – jcollum

1

SET ROWCOUNT 1は、最初の行が返された後に処理を停止します。これは、計画にブロッキング演算子が発生しない限り、結果は役に立たないことを意味します。

実際には、このクエリのコストが重くTableXの行の数に依存する簡単な例

SELECT * FROM TableX 

を取ります。

SET ROWCOUNT 1を使用しても、それは表示されません。 TableXの行数が1行か10億行かどうかにかかわらず、最初の行が返された後で実行を停止します。

多くの場合、SELECTの結果を変数に割り当てて、結果を表示するSSMSによって速度を落とさずに論理読み取りのようなものを見ることができます。

SET STATISTICS IO ON 
    DECLARE @name nvarchar(35), 
      @type nchar(3) 

    SELECT @name = name, 
     @type = type 
    FROM master..spt_values 

関連接続項目の要求Provide "Discard results at server" option in SSMS and/or TSQL

関連する問題