データを出力せずに SQL Server Mgmt Studio でパフォーマンスをテストするにはどうすればよいですか?
-
11-09-2019 - |
質問
SQL Server Management Studio を使用します。
結果ウィンドウがテストに影響を与えずに、大規模な選択 (たとえば 600k 行) のパフォーマンスをテストするにはどうすればよいですか?2 つのクエリは両方とも同じ場所に出力されるため、すべての条件が等しい場合、これは実際には問題ではありません。しかし、テスト サイクルを高速化したいのですが、SQL Server Management Studio の出力設定が邪魔になっているのではないかと考えています。私が現在使用しているのはテキストへの出力ですが、より良い代替手段を期待しています。
データベースがローカル ボックス上にあるため、これが数値に影響を与えていると思います。
編集:ここで WHERE 1=0 を実行することについて質問がありました (結合は行われると考えましたが、出力はありませんでした) が、テストしましたが機能しませんでした。クエリのパフォーマンスの有効な指標ではありません。
解決
あなたは、クエリの前にSET ROWCOUNT 1
を行うことができます。私はそれが正確に何をしたいのですかわからないが、それは返され、したがって、あなたの正確な計算コストを与えるべき大量のデータを待つ必要がなくなります。
しかし、あなたはクエリにクライアント統計を追加した場合に、数字の1はあなたにそれがネットワーク経由でデータを転送するのに要する時間を含めていないサーバーの計算時間を与えるサーバーの応答に時間を待っている。
他のヒント
あなたはをON href="http://msdn.microsoft.com/en-us/library/ms190287.aspx" rel="nofollow noreferrer">のSET STATISTICS TIMEがの測定を取得することができますサーバの時刻。そして、あなたは、クエリ/ 含めるクライアント統計に(Shiftキー+ Altキーを使用することができますSSMSの+ S)は、クライアントの時間の使用状況に関する詳細情報を取得します。 のように、そのSQLクエリを実行し、終了したときに、クライアントに結果を返すが、その代わりに、彼らは実行するをしません、彼らは結果を返すと、通信チャネルがいっぱいになった場合でも、実行を中断します。
クエリは完全にクライアントに結果パケットを送信無視その下でのみコンテキストが活性化です。あなたのパフォーマンスを測定する場合でも、クライアントへの出力を返すための時間も考慮しなければなりません。あなたは必ず自分自身のクライアントが速くSSMSよりになりますされていますか?
SET ROWCOUNT 1
計画が結果が無駄になり、ブロッキングオペレータを有することが起こる場合を除き意味する処理を停止します。
簡単な例を考える
SELECT * FROM TableX
実際には、このクエリのコストは大きくTableX
の行数に依存します。
SET ROWCOUNT 1
を使用すると、そのいずれかが表示されません。最初の行が返された後に関わらずTableX
は、1行または10億行を持っているかどうかそれは実行を停止します。
私は、多くの場合、論理的には結果を表示SSMSによって減速されずに読み込むようなものを見てできるようにするには、変数にSELECT
結果を割り当てます。
SET STATISTICS IO ON
DECLARE @name nvarchar(35),
@type nchar(3)
SELECT @name = name,
@type = type
FROM master..spt_values
関連接続項目要求<のhref = "https://connect.microsoft.com/SQLServer/feedback/details/724061/provide-discard-results-at-server-option-in-ssms-andがあります-or-TSQL」のrel = "nofollowを">提供 "SSMSでオプション" サーバーでの結果を破棄および/またはTSQLする
どのようにして、クエリのパフォーマンスをテストすることができますか?テストはあなたのクエリを実行するために起こっているかについては何も教えてくれない場合は、テストをスピードアップすることは無意味です。あなたは本当に、クエリのこの犬はあなたがprodにそれを押した後にデータを返すために10分かかり知りたいですか?
そしてもちろん、その60万件のレコードを返すためにいくつかの時間を取るつもり。情報がネットワークを介して行かなければならないので、それはあなたのユーザーインターフェイスにも、それはおそらくあなたのクエリウィンドウでより長い時間がかかりますされます。
あなたができる最善のことは、実際のクエリのクエリ実行プラン(プレス Ctrlキー + L )をチェックすることです。それはあなたに利用できるパフォーマンスのための最高のguesstimateが得られます。
の where 句は WHERE 1=0
これは Management Studio ではなく SQL Server 側で確実に発生しています。結果は返されません。
DB エンジンは、Mgmt Studio を実行しているのと同じマシン上にありますか?
あなたは出来る :
- テキストに出力または
- ファイルに出力します。
- 「クエリ結果」ペインを閉じます。
これは、Mgmt Studio でグリッドの描画に費やされるサイクルを移動するだけです。おそらく、Resuls to Text の方が全体的にパフォーマンスが高いでしょう。ペインを非表示にすると、Mgmt Studio でデータを描画するサイクルが節約されます。まだ Mgmt Studio に返されているため、実際には多くのサイクルを節約できません。