web-dev-qa-db-ja.com

明らかなネットワークの問題なしに接続タイムアウトの期限が切れました

接続を受け入れるときに断続的にタイムアウトする特定のSQL Serverがあります。この問題は1日を通して一貫していますが、発生率は非常に低いです。トラブルシューティングを続行するにはどうすればよいですか?

接続タイムアウトの期限が切れました。ログイン前のハンドシェイクの確認応答を消費しようとしたときにタイムアウト期間が経過しました。これは、ログイン前のハンドシェイクが失敗したか、サーバーが時間内に応答できなかったことが原因である可能性があります。このサーバーへの接続試行中に費やされた時間は-[Pre-Login] initialization = 0でした。 handshake = 15002; (Microsoft SQL Server、エラー:-2)

サーバー構成:

  • SQL Server 2016 SP1 CU5 Enterprise(問題はSP1より前にも発生しました)
  • サーバーとクライアントの両方にWindows Server 2012 R2
  • VMware ESXi、HP ProLiant DL360 Gen9上の6.5.0
  • VMには8つのvCPU、64 GiBメモリ(完全に予約済み))

テストスクリプト(毎秒1回実行):

$failed = $false;
$loginDuration = (Measure-Command {
    $ncon = New-Object System.Data.SqlClient.SqlConnection `
        @( 'Data Source=1.2.3.4,16143;Database=Test;User=Test;Password=****;Pooling=false;' );
    try 
    {
        $ncon.Open();

        $cmd = New-Object System.Data.SqlClient.SqlCommand `
            @( 'SELECT @@VERSION', $ncon );
        $cmd.ExecuteNonQuery();

        $ncon.Dispose();
    }
    catch
    {
        $failed = $true;
    }
}).TotalMilliseconds;
Write-Metric -metric 'itp.dbserver.logintime' -unit 'milliseconds' `
    -value (&{if ($failed) { 120000 } else { $loginDuration }});

観察:

  • OSの更新、SQL Serverの更新、Sanの移動、Hyper-VからVMWareへの移動の後に問題が発生し始めました
  • ほとんどの接続が成功します(1,440回の試行のうち4回の失敗)
  • 失敗は常に「[Pre-Login] initialization = 0;」に小さい数字でリストされます。 「handshake = 15002」の数が多い。 「見つかりません」や「そのようなホストは認識されていません」などのエラーは発生せず、「接続タイムアウト」のみが発生します
  • リスナーの暗号化は有効になっていません
  • Pingは長期間にわたって損失がないことを示しています(送信された96,045のうち0は損失)
  • すべてのファイアウォールが無効になっています
  • IPv6アドレスとIPv4アドレスを使用して試行された接続は、同じ割合で失敗します
  • CPUは低品位(<40%)
  • アクティブセッションは永続的に約400です
  • バルーンドライバーが無効になっています
  • 一度行われた接続は安定しており、クエリの実行時に予期しないエラーが発生することはなく、奇妙な切断もありません。
  • 複数のクライアントの接続に問題があります-ODBCおよびADO複数のコンピュータから

更新:最終的に、失敗した接続のクライアント側のWiresharkトレースを取得しました。パケット損失は明らかではありません。クライアントはTCP ACKをリアルタイム(<10ms)で受信します。クライアントは障害時にDNS名を使用していましたが、接続文字列のIPv4アドレスを使用して障害が発生しました。

Wireshark conversation graph showing server not responding for >15 seconds

送信されたログイン前リクエストパケットに対して即時にTCP ACKが返されるという事実は、問題をOSまたはSQL Serverに限定するものだと思いますか?

6
Mitch
3
Mitch