web-dev-qa-db-ja.com

長距離SQL接続の待ち時間の測定

SQLServerデータベースに接続し、「プロパティ」に対して約360のクエリを実行し、そのデータを「cProp」と呼ぶ.Netオブジェクトとして返す、シンプルな「クライアント」アプリを作成しました。

クエリは複雑さが異なりますが、非常に長い時間がおそらく400ミリ秒かかります。最近60のプロパティで実行したところ、実行全体に約3分かかりました。お客様は、データベースをリモートサーバーに移動することを決定しました。その結果、同じクエリでは51分かかりました。

現在、問題は行の取得にあると99%確信していますが、それを証明する必要があります。 DBAはプロセスを追跡しましたが、それを以前に使用したことがなかったため、プロセスに含まれている情報が少ないことを知り、私はがっかりしました。私が見たのは、サーバー時間がわずか4分未満であるということです。これは、問題が行の取得にあるという私の信念を強めます。

しかし、それをどのように測定しますか?トレースは行数や合計データサイズについて何も返しません-私はそれを間違っていますか?また、バッチ処理はサーバーの外部で行われることも知っています。そこで、そこで何が行われているのかを知るにはどうすればよいですか一般的に言えば、いわば「サーバーの外」で起こっている問題をいかにデバッグするかです。

5
Maury Markowitz

ここでいくつかの数学を明確にするために:

  • 「プロパティ」ごとに360クエリ
  • 60プロパティ* 360 = 21,600クエリ
  • 持続時間3分は、1秒あたり約120クエリです。

したがって、最善のケースでは、1秒あたりのスループットが平均120クエリになります。

SQL Serverをpingレイテンシが65ミリ秒の場所に移動すると、平均して1秒あたり7クエリになります。

あなたの最善の策は

  • このクエリの実行中に待機統計を測定する
    • 監視ツールがない場合、これを実行する簡単な方法は、Brent Ozar Unlimitedによって開発されたオープンソースツールである sp_BlitzFirst を実行することです。 (とりわけ)待機統計のスナップショットを取得し、5秒待ってから、別のスナップショットを取得して、最大の問題の概要を表示します
    • サーバーがPaul Randalのブログ投稿にあるようなクエリを使用して開始してからの待機統計も確認できます。 待機統計、またはどこが痛いか教えてください
  • これらの結果が得られたら、最高の待機統計を調べ、 SQLスキル待機統計ライブラリ を使用して、それらの意味を詳しく調べます

説明に基づいて、おそらく ASYNC_NETWORK_IO waits が表示されます。これはcanはネットワーク転送が遅いことを示します。しかし、通常、これはクライアントアプリケーションが行ごとの処理を行っており、SQL Serverが行を送信するのを待っていることを意味します(ネットワーク上で可能な限り高速に行を実行したい場合)。

関連する注意-一般的に、21,000のクエリを実行して(潜在的に遅い)ネットワーク上で21,000のラウンドトリップを行うよりも、より大きなデータの「グループ」をプルしようとする方がはるかに効果的です。 これは「チャット」インターフェースまたはAPIと呼ばれ、 一般にアンチパターンと見なされます です。

65ms * 21,600クエリが1,404,000 ms、AKAの23分のオーバーヘッドであると考えてください。これは、ラウンドトリップの数を制限するだけで取り除くことができる、耳にした大きなチャンクです。

6
Josh Darnell

クエリがSQLサーバーから再実行するのにかかる時間をテストする別の方法は、 Test-DbaNetworkLatency を使用することです。

例えば.

Test-DbaNetworkLatency -SqlInstance sqlserver2014a、sqlcluster、sqlserver -Query "select top 10 * from otherdb.dbo.table" -Count 10

Windows資格情報を使用して、sqlserver2014a、sqlcluster、およびsqlserverで「select top 10 * from otherdb.dbo.table」の実行結果の戻りを10回テストします。 -sqlCredentialを使用して、SQL credsを上記のコマンドに渡すことができます。

典型的な出力(マイナスサーバー名は以下のようになります):

>

ExecutionCount     : 10
Total              : 340.77 ms
Average            : 34.08 ms
ExecuteOnlyTotal   : 246.72 ms
ExecuteOnlyAverage : 24.67 ms
NetworkOnlyTotal   : 94.05 ms
0
Kin Shah