web-dev-qa-db-ja.com

クエリはローカルでは非常に高速に実行され、リモートマシンでは非常に低速で実行されます

リモートマシンからSQLServer Management Studioから実行すると、実行に24〜38秒かかるクエリがありますが、SQL Server Management Studioを使用してローカルのマシンから実行すると、実行に1秒未満かかります。

SQL Server 2005 Windows Server 2003 R2 Standard Editionは、4GBのRAMとシングルCPUを搭載したVMWare3.5.0で仮想化されています。

また、SQL Mgmt Studioからだけでなく、アプリからも同じクエリの実行速度が遅いことを追加します。

ローカルでは超高速で、リモートマシンでは超低速で実行される理由について何か考えはありますか?

編集:SQL Serverは結果のキャッシュを異なる方法で処理しますか?これは、問題の原因となっているソフトウェアのベンダーがテーブルにインデックスを追加したため、結果が表示される原因となったため、ローカルと同じようにリモートですばやく尋ねられるためです。 SQLプロファイラーを使用して、クエリの完了にかかる時間を調べましたが、リモートクエリの完了には間違いなく時間がかかり、インデックスを追加した後も同じ時間がかかっているようです。

3
nvahalik

デフォルトでは、SQL Serverは、ローカル接続を行うときに共有メモリを使用して接続し、リモート接続を行うときにTCP/IPまたは名前付きパイプを使用して接続します。使用されているプロトコルに関連するものかどうかをテストするには、ローカルに接続してみますが、TCP/IPまたは名前付きパイプを使用するように強制します。

  1. managementStudioを開く
  2. [接続]-> [データベースエンジン]をクリックします
  3. [オプション]をクリックします
  4. [接続プロパティ]で[ネットワークプロトコル]を変更します

クエリの実行はまだ同じくらい遅いですか?

また、リモートで接続する場合、最初の接続は接続に時間がかかりますか?ここでの私の考えは、それが認証である可能性があるということです。

2
Joel Mansford

私の期待は次のいずれかです:

  • 大量のデータが返され、データがネットワークを通過するのにそれだけの時間がかかります。
  • リモートマシンのパフォーマンスの問題。

クエリウィンドウの[クライアント統計を含める]のツールバーボタンをクリックして、クエリの実行後に返される内容を確認します。サーバーから受信したバイト数、実行時間などを確認できます。

Client Execution Time                                   12:08:38
Query Profile Statistics                                                                        
  Number of INSERT, DELETE and UPDATE statements        0
  Rows affected by INSERT, DELETE, or UPDATE statements 0
  Number of SELECT statements                           3
  Rows returned by SELECT statements                    15
  Number of transactions                                0
Network Statistics                                                                      
  Number of server roundtrips                           3
  TDS packets sent from client                          3
  TDS packets received from server                      7
  Bytes sent from client                                240
  Bytes received from server                            21306
Time Statistics                                                                 
  Client processing time                                31
  Total execution time                                  61093
  Wait time on server replies                           61062

編集:

あなたのコメントは、39行しか返さないので、おそらくクライアントとサーバー間のデータ転送ではないと言っています。

クライアントにフィルターされたサーバーに対してSQLProfilerを実行し、何が起こっているのかを確認することを検討します。 SQLプロファイラーの使用に関するいくつかの素晴らしい記事があります。

2
Evan Anderson

リモートデスクトップなど、別の方法でマシンに接続しようとした場合のパフォーマンスはどうですか?マシンに到達しようとしたときにすべてが遅い場合は、ネットワークカード/ケーブルの破損、ルーター/ファイアウォールの問題など、ネットワークの問題が発生している可能性があります(ギガビットネットワークカードで10Mビットモードのサーバーをいくつか見ました: D)

ローカルサーバーから実行するときは、リモートで実行するときと同じユーザーを使用しますか? ADアカウントですか、それともSQLアカウントですか。

Sys.dm_os_waiting_tasksで待機タイプを探します

http://technet.Microsoft.com/en-us/library/cc966413.aspx

0
Hakan Winther