Pourquoi délai d'attente peut se produire dans SqlConnection.Open()?
Quels sont les cas lorsque le délai d'attente se produit dans SqlConnection.Open()?
Sur l'un de nos IIS boîtes de 10 secondes après AppProcess a été recyclé, l'exception suivante est apparue:
Type : System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Source : .Net SqlClient Data Provider
Help link :
Errors : System.Data.SqlClient.SqlErrorCollection
Class : 11
LineNumber : 0
Number : -2
Procedure :
Server : XXX
State : 0
ErrorCode : -2146232060
Data : System.Collections.ListDictionaryInternal
TargetSite : Void OnError(System.Data.SqlClient.SqlException, Boolean)
Stack Trace : at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginWithFailover(Boolean useFailoverHost, String primaryHost, String failoverHost, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.Impl.SessionFactoryImpl.OpenConnection()
Selon MSDN Nombre propriété contient le Moteur SQL Erreur. Mais je n'étais pas en mesure de trouver une erreur -2 en maître.dbo.sysmessages.
L'intervalle entre l'opération qui a essayé d'ouvrir la connexion a été d'environ 3,5 secondes. Le délai d'attente de connexion n'a pas été explicitement changé.
Après 2 secondes d'exception semblable est apparu pour la même thread, mais dans l'autre endroit. La pile d'appel a été beaucoup plus courte:
Type : System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Source : .Net SqlClient Data Provider
Help link :
Errors : System.Data.SqlClient.SqlErrorCollection
Class : 11
LineNumber : 0
Number : -2
Procedure :
Server : XXX
State : 0
ErrorCode : -2146232060
Data : System.Collections.ListDictionaryInternal
TargetSite : Void OnError(System.Data.SqlClient.SqlException, Boolean)
Stack Trace : at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.Impl.SessionFactoryImpl.OpenConnection()
L'intervalle entre l'opération qui tente de communiquer à la DB et l'erreur est inférieure à la seconde.
Questions:
1. Comment reproduire ces erreurs?
2. Pourquoi la pile des appels est plus courte dans le second cas?
OriginalL'auteur the_joric | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
Semble comme le problème a été causé par la mise en miroir. La même situation est décrite ici
OriginalL'auteur the_joric
Certains cas de délai d'attente dans
SqlConnection.Open()
fait référence à une connexion de fuite. Il peut se produire lorsque le pool de connexions est de connexions. D'abord, vous devez vérifier le numéro de remise en état des connexions compteur de l'ordinateur IIS. Il doit être 0. Si non, vous devriez vérifier votre code pour s'assurer que les connexions sql sont fermés correctement.OriginalL'auteur hakan
Il peut y avoir quelques raisons telles que SQL server n'est pas en mesure de traiter votre travail..
Généralement serveur qui héberge SQL Server, Ram - CPU monte, et votre sql cant donner une réponse à votre appel. augmenter votre durée d'expiration, et attendre un peu plus (Si vous assurez-vous, vos paramètres de connexion sont tous corrects).
Il semble donc il n'y a pas un problème de connexion. J'ai une question. Votre Sql est en cours d'exécution sur local ou sur le serveur? Son cours d'exécution sur le serveur, vérifiez que le serveur de Journaux d'Événements. Est-il un journal sur le Réseau ou Sql?
SQL server à distance, mais nous n'avons pas accès. J'ai mis une demande de DBA. Je me demandais ce qui peut provoquer le problème.
OriginalL'auteur Serkan Hekimoglu