Windows認証を使用すると、SQL Server Management Studioの接続が遅くなるかタイムアウトになる


23

Windows認証を使用してTCP経由でSQL Server 2012インスタンスに接続しようとすると、SQL Server Management Studio 2014で非常に長い遅延(10〜30秒)が発生します。これは、オブジェクトエクスプローラーまたは新しい空のクエリウィンドウを接続するときに発生します。接続すると、クエリの実行が高速になります。SQL Server認証を使用して接続する場合、問題は発生しません。

環境:

  • Windows 7、ドメインユーザーとしてログイン
  • IPアドレスを介したTCP接続(ホスト名ではない)
  • サーバーは、VPN経由で接続されたリモートロケーションにあります
  • 暗号化なし

ドメインアカウントで同僚のWindows 7コンピューターにログインし、同じVPNを介して同じSQL Serverに接続した場合、遅延はありませんでした。同じ同僚が自分のドメインアカウントでPCにログインすると、遅延が発生しました。これらのテストは、問題が私のPCに固有あることを示しています。また、この特定のSQL ServerおよびVPNに接続するときにのみ問題が発生します。Windows認証を介して、ローカルネットワーク上の他のSQL Serverに遅滞なく接続できます。

私が成功せずに試したもの:

  • 無効化されたウイルス対策およびファイアウォール
  • 「%userprofile%\ AppData \ Roaming \ Microsoft \ SQL Server Management Studio」の下の「12.0」フォルダーの名前を「_12.0」に変更して、SSMSにユーザー設定を再作成させました。
  • ネットワークプロトコルをTCPではなくTCPに強制します<default>。名前付きパイプも試しましたが、サーバーはそのためにセットアップされていません。
  • SSMS 2012をインストールし、2014の代わりに試してみました。
  • 無効なIPv6
  • etc \ hostsファイルでcrl.microsoft.comを127.0.0.1にブラックホールしました。
  • SSMS、Visual Studio、およびWindowsのカスタマーエクスペリエンス向上プログラムを無効にしました。
  • すべてのSQL Server関連アプリをPCからアンインストールし、2012年に再インストールしました。

TCPViewの手がかり:

  • TCPViewを使用して、新しい接続を作成するとすぐに状態がESTABLISHEDになりますが、SQL Serverとの1つまたは2つ以上の接続が継続的に試行され、TIME_WAITで閉じられることに気付きました。同僚のコンピューターでは、これらの接続は確立されており、しっかりしています。だから、これがタイムアウトの原因であると確信していますが、接続は何のためであり、なぜ失敗するのですか?(SSMSにはアドオンがありません。)

何か案は?

更新:Intellisense /オートコンプリートの手掛かり(?):

ついに接続したら、Intellisense / Autocompleteが機能しないことに気付きました。これらには、SSMSからの個別の接続が必要ですか?私はそれらを無効にしようとしましたが、それは長い接続遅延を解決するようには見えませんでした。


/ logスイッチを使用してSSMSを実行しようとしましたか?
ミスターマグー

@MisterMagooは今それを試しています。接続試行については実際には何も記録しません(新しい接続を作成するときにファイルは大きくなりません)。「キャッシュからコンポーネントアセンブリを正常にロードしました」など、特定のパッケージをUIにロードすることに関するものがほとんどです。エラーや例外を見つけることができませんでした。
ジョーダンリーガー

[OK]を、私はそれがするかどうかはわかりませんでしたが、それはすぐに試してみる価値があると考えました。何が起こっているのかに本当に興味がある場合は、Sysinternals Process Monitorを起動して、何が起こっているのかを特定できるかどうかを確認する必要があります。technet.microsoft.com/en-us/library/bb896645.aspx
マグー

私は約1時間ProcMonダンプを熟読していましたが、非常に多くのイベント(Ssms.exeにフィルター処理されていることもあります)があり、あまり多くのことはできません。
ジョーダンリーガー

@MisterMagoo私が見ることができるのは、TcpViewで見た接続試行が実際に長い時間(それぞれ5秒以上)かかっていることだけです。特定のローカルポートで「TCP接続」イベントを表示し、そのローカルポートで送信または受信したものが次に表示されるのは、常に少なくとも5秒後です。
ジョーダンリーガー

回答:


19

同僚とサーバーに接続しているときに、SQLプロファイラーでトレースを実行してみてください。
[RPC、SQLステートメント、およびPreConnect-開始/完了]を選択します。
[結果をテーブルに保存]オプションを選択し、2つのテーブルを比較してボトルネックを見つけます。

または、IPで接続しているため、逆DNSルックアップを実行している可能性があります。その場合、hostsファイルにエントリを追加します。


2
サーバーのIPアドレスにローカルetc / hostsエントリを追加してから、SSMSを再試行しました。ビンゴ!超早い。ありがとうございました!(ホスト名ではなく、IPアドレスを介してSSMSを接続したままにしました。)なぜこの回避策が必要なのか疑問に思っていますが、同僚は必要ありません。DNS関連のようです。いずれにせよ、これは私にとって非常に良い解決策なので、答えを更新したら賞金を授与します。
ジョーダンリーガー

ホストエントリを削除したときにping-###。###。###。###が最初のpingの前に非常に遅かったため(逆引きのために5秒間一時停止したため)、逆引きだと思います。ホストエントリを追加して戻すと、ping -aは高速でした。しかし、tracertまたはnslookupに違いはありませんでした。私のPCで何かが違うはずだと思うので、同僚がいないときに逆引き検索を実行しています(または、同僚のほうがはるかに高速です)。ところで、接続速度が高速になったので、IntelliSenseが再び動作します。
ジョーダンリーガー

hostsファイル内のIPのDNSエントリが偽物であっても、これは非常に高速です!ありがとうございました!
felickz

私はあなたの答えを読むまでVPNを介してSSMSを接続しようとしてタイムアウトになりました。はい、IP経由でサーバーに接続していて名前解決が機能していなかったので理にかなっています。ホストファイルにエントリを追加すると、何時間もこれを機能させようとして最終的に機能しました。ありがとう!脚注として、私はrunas / netonlyで異なるドメインからのWindows認証を使用していると言いたいのですが、このソリューションでうまく動作します。
RobbZ

5

最初に確認する必要があるのは、サーバーまたはクライアントのDNS設定です

SQL ServerにActive Directoryへの接続に問題があることは珍しくありません。あなたがローカルのWindowsアカウントで試してみれば、私はあなたが問題を抱えていないことを確信しています。サーバーがパブリックインターネットDNSで構成されていることは珍しくありません。SQLServerがDCに接続して資格情報を確認し、検証すると、ADのDNSサーバーではなくパブリックDNSにトップコンタクトを試みます。この情報はパブリックDNSに保存されないため、検証に失敗し、NTLMを介して適切なDNSサーバーまたはDCに接続するまで遅延が発生します。

他のSQL Serverで問題が発生していないため、ほぼ確実にこの問題はADまたはDC構成とは関係ありません

火災IPCONFIG.EXE /すべての設定されたDNSサーバをチェックするためにCMDからのコマンドを。ADのDNSサーバーのみを構成する必要があります。すべてのパブリックDNSサーバーを削除し、ADのDNSサーバーのみを残します。


SQL ServerがパブリックDNSに接続してドメインコントローラーのIPアドレスを検索し、それがWindows認証を検証しようとしたときに遅延を引き起こしていることを提案していますか?その場合、同じVPNを介して、同じローカルネットワーク上の同僚のPCで問題なく動作するのはなぜですか?コンピューターのDNS設定を確認しましたが、同僚のPCにはない、IP部門から追加を求められた3つ目の追加のDNSサーバーがありました。しかし、そのサーバーを削除し、ipconfig / flushdnsを実行し、再試行したとき、それはまだ遅かった。
ジョーダンリーガー

IPアドレスまたはサーバーのFQDN(ホスト名だけでなく)を使用すると、私にとって大きな違いが生じました。私の場合、間違いなく遅いDNSの問題でした。
userSteve

0

次のC:\Windows\System32\drivers\etc\hostsような行を追加して、ファイルを拡張しました。

201.202.203.204     mysqlserver

201.202.203.204 SQL ServerのIPアドレスです。

mysqlserver -好きな名前(どこでも使用する必要はありません)。

これにより、サーバーが高速になりました。

ありがとう:d -_- b、Jordan、Rieger、felickz、RobbZ


0

ドメインネットワークプロファイルのSQLサーバーでWindowsファイアウォールをオフにします。

  • Powershellを起動します
  • 実行Get-NetFirewallProfile -Profile Domainして現在の状態を確認します
  • 有効になっている場合は、次を実行Set-NetFirewallProfile -Profile Domain -Enabled Falseして無効にします。

もしそうなら、後でそれをオンに戻して、設定を微調整できます。または、安全な環境にいる場合は、そのままにしておくことができます。

奇妙なことは、Windowsファイアウォールが通信をブロックしても、接続はできるが、最初のハンドシェイクと後続の要求の両方が非常に遅いということです。私の理論(実際の証拠に基づいていない)は、これらの場合、通信はNamed Pipesにフォールバックするというもので、リモートPC間でははるかに低速です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.