Impossible de se connecter à SQL Server session de base de données
Mon asp.net applications fonctionne très bien tous les jours.
Jusqu'au mois dernier, mon web start pour obtenir 2-3 heure de problème avec Sqlsession serveur d'état comme
suivre:
Blockquote
Système.Web.HttpException Exception de type 'System.Web.HttpException " a été levée. au Système.Web.HttpAsyncResult.Fin (la) du Système.Web.SessionState.SessionStateModule.EndAcquireState(IAsyncResult ar) au Système.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) ================================================== Exception: System.Web.HttpException Impossible de se connecter à la session SQL Server base de données. au Système.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e) au Système.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo) au Système.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) au Système.Web.SessionState.SqlSessionStateStore.DoGet(HttpContext contexte, id de Chaîne, Booléen getExclusive, Boolean& verrouillé, de Temps& éclusage, Objet& lockId, SessionStateActions& actionFlags) au Système.Web.SessionState.SqlSessionStateStore.GetItemExclusive(HttpContext contexte, id de Chaîne, Booléen& verrouillé, de Temps& éclusage, Objet& lockId, SessionStateActions& actionFlags) au Système.Web.SessionState.SessionStateModule.GetSessionStateItem() au Système.Web.SessionState.SessionStateModule.PollLockedSessionCallback(état de l'Objet) ================================================== Exception: System.InvalidOperationException Délai d'attente expiré. Le délai écoulé avant l'obtention d'une connexion à partir de la piscine. Cela peut avoir lieu, car toutes les connexions ont été mis en commun dans l'utilisation et max de la taille du pool a été atteint. au Système.Les données.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) au Système.Les données.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) au Système.Les données.SqlClient.SqlConnection.Open() au Système.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)
Puis j'ai commencé à regarder dans ma session serveur de base de données et ne "exec sp_who" dans mon sql client qui a trouvé un grand nombre de dossiers de AspState fonctionnement en conséquence.
Je ne sais pas ce qui provoque ce genre de problème parce que nous ne changé pas de choses sérieuses
en dehors de l'application, à seulement quelques bug soit corrigé.
Voici le détail de mes applications web milieux:
asp.net 3.5 (convertir 1.1) ... fonctionnent très bien dans le
2 serveurs de la ferme avec sqlmode de l'état de la session.
Personne ne kwow sur ce problème ou obtenir toute idée d'enquête?
Grâce
OriginalL'auteur tongdee | 2009-01-12
Vous devez vous connecter pour publier un commentaire.
Cela sonne vraiment comme une situation où vous êtes à l'aide des toutes les connexions disponibles dans la piscine. Passer par votre code, et assurez-vous pour l'installation de vos connexions de base de données comme ceci:
Une fois sorti de cette "aide", le lien sera automatiquement fermé.
Ceci vous permettra de nettoyer toutes les autres connexions de base de données dans votre application et l'État de connexion au Serveur sera capable de se connecter en cas de besoin.
OriginalL'auteur grogan31
J'ai vu cette erreur exact arriver quand un développeur a l'aide d'un nombre élevé de SqldataReaders à obtenir des données pour construire une sorte de tableau de bord, mais il n'a jamais fermé ses données les lecteurs, même si il a eu le comportement de la commande set pour CloseConnection. Une fois qu'il a fait (par l'intermédiaire de l'enveloppe à l'aide de blocs) ces s'en alla. Encore une fois, cela peut ne pas être la cause réelle du problème, mais le pool de connexion de l'épuisement souvent des points de connexions n'étant pas fermé correctement.
OriginalL'auteur kd7
Ne sais pas si quelqu'un est toujours à la recherche à ce fil, mais j'ai trouvé un article intéressant sur un grand état de session et un grand nombre de sessions simultanées à l'origine des problèmes lorsque les données ont été supprimé (lors de la session n'est plus valide). Accordé l'information ici est un peu daté, il peut être intéressant de regarder dans. Voici le lien: http://msmvps.com/blogs/greglow/archive/2007/02/04/improving-asp-net-session-state-database-performance-by-reducing-blocking.aspx
OriginalL'auteur ctc
Il est tout à fait un certain temps depuis que ce post a été soulevé, mais j'ai récemment expérimenté ce problème précis dans un environnement de Production et de la pensée, il peut être utile pour d'autres dans le futur.
Nous avons une ASP.NET application web MVC en cours d'exécution sur .NET 4.5.2 un équilibrage de charge sur les deux nœuds. La demande a été configuré pour stocker session dans un ASPState base de données sur SQL Server 2012 (version 11.0.5058.0). Nous souffrons d'intermitant délais d'expiration:
Quelques réponses ici visent à assurer qu'aucune autre connexion fuites dans la base de code, je crois, sont mis de pointe. Un pool de connexion est créée pour chaque chaîne de connexion, donc tous les correctifs pour les connexions à d'autres bases de données n'aurait pas un effet bénéfique sur l'État de la Session de base de données.
Nous avons résolu ce problème avec deux modifications:
Élever le Max de la Taille du Pool en remplaçant la valeur par défaut de 100 dans la chaîne de connexion dans le web.fichier de configuration:
Il était évident que le AspState de la base de données a été créée avec l' .NET 2.0 de ligne de commande et, surtout, de la dbo.DeleteExpiredSessions SP a connu des problèmes avec blocage. Et, pour aggraver le problème, le travail a été configuré pour exécuter cette procédure à chaque minute. La base de données AspState a été re-créé à l'aide de l' .NET 4.0 ligne de commande comme suit:
Critique, la dernière version inclut une performance améliorée de la version de la DeleteExpiredSessions procédure qui intègre un curseur qui supprime les sessions expirées un à la fois. Nous avons également changé le calendrier de l'associé du travail à exécuter toutes les heures plutôt que chaque minute.
https://sqlperformance.com/2013/01/t-sql-queries/optimize-aspstate
? DeleteExpiredSessions SP NET 4.5 versióndon't try to delete ALL rows in one fell swoop, but don't play one-by-one whack-a-mole, either. Instead, delete n rows at a time in separate transactions – reducing the length of blocking and also minimizing the impact to the log
Et dbo.TempResetTimeout
Every time a page is loaded (and, if the web app hasn't been created correctly, possibly multiple times per page load), the SP dbo.TempResetTimeout is called, ensuring that the timeout for that particular session is extended as long as they continue to generate activity. On a busy web site, this can cause a very high volume of update activity against the table dbo.ASPStateTempSessions
Vue: optimiser-aspstatehttps://sqlperformance.com/2013/01/t-sql-queries/optimize-aspstate
OriginalL'auteur abrown
Si aucune des réponses ici, le travail, puis vérifier connectionString dans
<configuration>
et<sessionState>
. Dans mon cas, j'ai mis à jour la chaîne de connexion dans<configuration>
mais pas dans l'état de session pour pointer vers un autre serveur SQL.Simplement spécifier la chaîne de connexion approprié dans
<sessionState>
résolu ce même message d'erreur.OriginalL'auteur Nitin A.
A votre charge a augmenté? Vous pourriez avoir un grand nombre de connexions parce que vous avez beaucoup plus d'utilisateurs utilisant le système.
Une chose que vous pouvez faire est d'optimiser votre session d'utilisation. Vous pouvez spécifier si une page utilise l'état de session ou, si elle n'en fait qu'à lire. Cela peut être un preety de grandes économies si vous avez des pages qui n'utilisent pas ou ne modifiez pas la session.
OriginalL'auteur JoshBerke