wake-up-neo.com

SQL Server-Handshake-Bestätigungsfehler vor der Anmeldung

Wir haben eine Produktionswebsite mit einer Mischung aus klassischem ASP, Inline-.NET und kompiliertem .NET, die mit einer SQL Server-Instanz kommuniziert, bei der sich beide VMs auf derselben physischen Box befinden und alles dort hervorragend funktioniert. Um einige Tests mit neuen Funktionen durchführen zu können, habe ich eine QA-Version der Site erstellt und eingerichtet, um eine Verbindung zu einer Datenbank auf einem VM gehostet auf einem anderen physischen Server herzustellen. Hierbei handelt es sich um verschiedene Netzwerke (DMZ)/internal), aber alle im selben Rack auf Gigabit, so dass Verbindungsgeschwindigkeiten kein Problem sein sollten.

Das Problem, auf das wir stoßen, ist, dass die QA-Version für eine Weile funktioniert und dann plötzlich stirbt, bis ich den App-Pool und die Site neu starte. Es handelt sich nicht um ein Lastproblem, da nur ich und zwei andere Personen diesen Prozess testen und ich bestätigt habe, dass auf dem Server, auf dem sich die QA - Datenbank befindet, kein Ressourcenproblem vorliegt (16 GB RAM, 3,2 GB im Einsatz und Prozessorauslastung im 2% Bereich). Der spezifische Fehler (siehe unten) tritt bei allen Varianten der Seiten auf - klassisches ASP, Inline-Net und die kompilierten Net-Seiten. Nach all den Recherchen, die ich durchgeführt habe, werde ich immer wieder darauf hingewiesen, dass es sich um ein Firewall-Problem handelt, aber wir haben sogar alle Ports zwischen den beiden Servern geöffnet und es passiert immer noch. Das Seltsamste ist, wenn wir das Tracen auf unserem ASA (5515-X) aktivieren, es kaum Verkehr sieht und manchmal die Site diesen Fehler sofort zurückwirft, während andere Male es mehr als 30 Sekunden dauert. Die fraglichen Seiten führen keine intensiven Suchvorgänge durch (eine gestorbene Seite erfasst insgesamt etwa 60 Datensätze). Hier ist der vollständige Fehler-/Stack-Trace:

  [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

Ich würde einen Codeblock anzeigen, aber da alle Seiten absterben, würde dies nicht viel nützen. Dies alles funktioniert in der Produktion hervorragend. Der einzige Unterschied besteht darin, dass sich die VMs auf verschiedenen physischen Hosts befinden. Angesichts der Tatsache, dass es sich um neue Hardware handelt, gibt es keinen Grund, warum dies Probleme verursachen sollte.

Ich bin hier auch auf mehrere Dinge gestoßen, bei denen exec sp_updatestats und dbcc freeproccache, aber keiner von diesen schien einen Unterschied zu machen.

Ich bin völlig verloren, also irgendwelche Vorschläge?

18
RubyHaus

Hatte ein ähnliches Problem mit SQL Express 2014, stellte sich als Windows-Firewall-Problem heraus. Einige unserer Server haben SQL 2005/2008, alle mit deaktivierter Windows-Firewall.

Die Änderung wurde auf meinem PC vorgenommen und danach hat es einwandfrei funktioniert!

Vielen Dank

Brendan

7
brendan

Ich bin vor ein paar Monaten auf ein ähnliches Problem gestoßen.

Für mich hat das Aktivieren von TCP/IP für IPV4 und IPV6 im SQL Server-Konfigurations-Manager das Problem behoben. Ich habe auch gesehen, dass dies auch dann auftritt, wenn IPV6 nicht installiert ist. Seltsamerweise habe ich dieses Verhalten sogar erfahren, wenn ich nur IPV4-Adressen spezifiziere ?!

6
coderpro

Hatte das selbe Problem/Fehler msg. Für mich sind es die Firewall-Einstellungen auf dem Server. Stellen Sie sicher, dass TCP Port 1433 für eingehenden Datenverkehr geöffnet ist.

4
Louis

Ich habe diesen Fehler nach der Aktivierung der Firewall erhalten. Ich habe Ports zur Firewall hinzugefügt, siehe sqlserver-Port aktivieren . Dann habe ich wieder diesen Fehler erhalten.

Aktivieren Sie im SQL Server-Konfigurations-Manager sowohl Named Pipes als auch TCP/IP.

Startmenü> Programm> Microsoft SQL Server> Konfigurationstools.

3
hmfarimani