web-dev-qa-db-ja.com

SQL Serverのログイン前ハンドシェイク確認応答エラー

従来のASP、インライン.Net、およびコンパイルされた.Netが混在する実稼働Webサイトがあり、両方が同じ物理ボックス上のVMであり、すべてがうまく機能するSQL Serverインスタンスと通信します。新しい機能を使用していくつかのテストを行うために、サイトのQAバージョンを作成し、VM別の物理サーバーでホストされている。異なるネットワーク(DMZ/internal)、ただしギガビット上の同じラック内にあるため、接続速度は問題になりません。

私たちが直面している問題は、QAバージョンが少し動作し、アプリプールとサイトを再起動するまで突然停止することです。これは負荷の問題ではありません。このプロセスをテストしているのは私と他の2人だけであり、QAデータベースのあるサーバーにはリソースの問題がないことを確認しました(16GB RAM、使用中の3.2GB、プロセッサー使用率が2%の範囲)。特定のエラー(以下を参照)は、ページのすべてのバリアント(クラシックASP、インライン.Net、およびコンパイル済み.Netページ)で発生します。私が行ったすべての研究に基づいて、私はそれがファイアウォールの問題であることを指摘し続けていますが、2台のサーバー間のすべてのポートを開いても、それは起こります。最も奇妙な部分は、ASA(5515-X)でトレースを有効にすると、トラフィックがほとんど見られないことです。また、サイトはそのエラーをすぐにキックバックしますが、30秒以上かかる場合もあります。また、問題のページは厳密な検索を実行していません(1つのページで合計約60件のレコードを取得しています)。完全なエラー/スタックトレースは次のとおりです。

  [Win32Exception (0x80004005): The wait operation timed out]

  [SqlException (0x80131904): Connection Timeout Expired.  The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement.  This could be because the pre-login handshake failed or the server was unable to respond back in time.  The duration spent while attempting to connect to this server was - [Pre-Login] initialization=21008; handshake=12; ]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +6749670
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815
   System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) +817
   System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() +344
   System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() +48
   System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean& marsCapable) +126
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +693
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +219
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +6777754
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +6778255
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +878
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +1162
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +72
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +6781425
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +103
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +2105
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1089
   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
   System.Data.SqlClient.SqlConnection.Open() +239
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

コードブロックを表示しますが、一度実行するとすべてのページが停止するため、あまり効果はありません。これはすべて実稼働環境でうまく機能するため、唯一の違いはVMが異なる物理ホスト上にあることですが、それがすべて新しいハードウェアであることを考えると、これに問題がある理由はありません。

また、ここでexec sp_updatestatsおよびdbcc freeproccache、しかし、どちらも違いを生むようには見えませんでした。

私は完全に迷っているので、何か提案はありますか?

18
RubyHaus

SQL Express 2014で同様の問題が発生し、Windowsファイアウォールの問題であることが判明した場合、一部のサーバーにはSQL 2005/2008があり、すべてWindowsファイアウォールが無効になっています。

PCで変更を加えたところ、その後完全に機能しました!

ありがとう

ブレンダン

7
brendan

数か月前、私はこれに似た問題にぶつかりました。

私にとって、SQL Server構成マネージャーでIPV4とIPV6の両方でTCP/IPを有効にすると、問題が修正されました。 IPV6がインストールされていない場合でも、これが発生するのを見てきました。奇妙なことに、IPV4アドレスのみを指定した場合でも、この動作を経験しました。

6
coderpro

同じ問題/エラーメッセージがありました。私にとっては、サーバー上のファイアウォール設定です。 TCPポート1433が着信トラフィック用に開いていることを確認してください。

4
Louis

ファイアウォールを有効にした後にこのエラーが発生しました。 enable sqlserver port でファイアウォールにポートを追加しましたが、再びエラーが発生しました。

SQL Server構成マネージャーで名前付きパイプとTCP/IPの両方を有効にします。次の場所にあります。

Startmenu> allprogram> Microsoft SQL Server>構成ツール。

3
hmfarimani