Impossibile connettersi a SQL Server database di sessione

Mio asp.net applicazioni funziona bene ogni giorno.
Fino al mese scorso, il mio web start per ottenere 2-3 momento di problema con Sqlsession server di stato come
a seguire:

Blockquote
Sistema.Web.HttpException Eccezione di tipo ‘System.Web.HttpException’ stata generata. a Sistema.Web.HttpAsyncResult.Fine() in System.Web.SessionState.SessionStateModule.EndAcquireState(IAsyncResult ar) al Sistema.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) ================================================== Eccezione: System.Web.HttpException in Grado di connettersi a SQL Server database di sessione. a Sistema.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e) in System.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo) al Sistema.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) al Sistema.Web.SessionState.SqlSessionStateStore.DoGet(HttpContext context, id di Stringa, Booleano getExclusive, Boolean& bloccato, TimeSpan& lockAge, Oggetto& lockId, SessionStateActions& actionFlags) al Sistema.Web.SessionState.SqlSessionStateStore.GetItemExclusive(HttpContext context, id di Stringa, Booleano& bloccato, TimeSpan& lockAge, Oggetto& lockId, SessionStateActions& actionFlags) al Sistema.Web.SessionState.SessionStateModule.GetSessionStateItem() in System.Web.SessionState.SessionStateModule.PollLockedSessionCallback(stato Oggetto) ================================================== Eccezione: System.InvalidOperationException Timeout. Il periodo di timeout trascorso prima di ottenere una connessione dalla piscina. Questo potrebbe essersi verificato a causa di tutti pool di connessioni erano in uso e la dimensione massima del pool è stato raggiunto. a Sistema.Dati.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) al Sistema.Dati.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) al Sistema.Dati.SqlClient.SqlConnection.Open() in System.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)

Poi ho iniziato a guardare nella mia sessione di db server e fatto “exec sp_who” nel mio client di sql che ha trovato un sacco di dischi di AspState operazione di risultato.

Non so che cosa provoca questo tipo di problema, perché facciamo cambiato non cose gravi
in applicazione, a pochi bug fisso.

Ecco di seguito il dettaglio della mia applicazione web per gli ambienti:

asp.net 3.5 (la conversione da 1.1) … molto bene
2 server farm con sqlmode di stato della sessione.

Qualcuno kwow su questo problema o ottenere qualche idea per le indagini?
Grazie

OriginaleL’autore tongdee | 2009-01-12

6 Replies
  1. 3

    Questo suona come una situazione in cui si utilizza il backup di tutte le connessioni disponibili in piscina. Passare attraverso il vostro codice e assicurarsi di impostare le vostre connessioni di database come questo:

    using (SqlConnection cn = new SqlConnection(connectionString))
    {
        using (SqlCommand cm = new SqlCommand(commandString, cn))
        {
            cn.Open();
            cm.ExecuteNonQuery(); //or fill a dataset, etc.
        }
    }

    Una volta al di fuori di questo “utilizzo di” dichiarazione”, la connessione verrà chiusa automaticamente.

    Fare questo eliminerà tutte le altre connessioni al database dell’applicazione e lo Stato di connessione del Server sarà in grado di connettersi quando necessario.

    Un pool di connessioni è creato per ogni singola stringa di connessione, in modo sicuramente di fissaggio potenziali perdite di connessione in altri database non pregiudica la Sessione Asp database di Stato?

    OriginaleL’autore grogan31

  2. 2

    Ho visto che questo errore esatto accadere quando uno sviluppatore utilizza un elevato numero di SqldataReaders per ottenere i dati per costruire una sorta di cruscotto, ma non ha mai chiuso i suoi dati i lettori, anche se aveva il comportamento del comando di set per CloseConnection. Una volta si faceva (via recinzione in blocchi) questi se ne andò. Di nuovo, questo non può essere la vera causa del problema, ma la connessione piscina esaurimento spesso punti di connessioni non viene chiuso correttamente.

    OriginaleL’autore kd7

  3. 2

    Non sono sicuro se qualcuno è ancora alla ricerca a questo thread, ma ho trovato un interessante articolo su grande stato della sessione e di un gran numero di sessioni simultanee causando problemi quando i dati è stato rimosso (quando la sessione non è più valido). Concesse le informazioni qui è un po ‘ datato, potrebbe essere la pena di guardare in. Ecco il link: http://msmvps.com/blogs/greglow/archive/2007/02/04/improving-asp-net-session-state-database-performance-by-reducing-blocking.aspx

    Articolo più dettagliato da Greg Basso, vedere aspalliance.com/…

    OriginaleL’autore ctc

  4. 2

    È un bel po ‘ di tempo da questo post è stato sollevato, ma recentemente ho sperimentato questo problema, in un ambiente di Produzione e pensato che potrebbe essere utile anche ad altri in futuro.

    Abbiamo un ASP.NET MVC applicazione web in esecuzione su .NET 4.5.2 carico bilanciato tra i due nodi. L’applicazione è stato configurato per memorizzare la sessione in un ASPState database su SQL Server 2012 (versione 11.0.5058.0). Siamo stati affetti da intermitant timeout:

    Informazioni sull’eccezione:
    Tipo di eccezione: HttpException
    Messaggio di eccezione: Impossibile connettersi a SQL Server database di sessione.
    Scaduto il Timeout. Il periodo di timeout trascorso prima di ottenere una connessione dalla piscina. Questo potrebbe essersi verificato a causa di tutti pool di connessioni erano in uso e la dimensione massima del pool è stato raggiunto.

    Alcune risposte qui intesi a garantire non ci sono altre perdite di connessione nel codebase, a mio avviso, fuorviante. Un pool di connessioni è creato per ogni singola stringa di connessione, quindi eventuali correzioni per connessioni ad altri database non avrebbe un effetto benefico sullo Stato della Sessione database.

    Abbiamo risolto questo con due modifiche:

    1. Alzando la Dimensione massima del Pool, sovrascrivendo il valore predefinito è 100 nella stringa di connessione nel web.file di configurazione:

        sqlConnectionString="data source=SERVERNAME;Initial Catalog=AspState;user id=AspStateUser;password=xxxxx;App=xxxx; Max Pool Size=200;" 
    2. Era evidente che il database AspState era stato creato con l’ .NET 2.0 riga di comando e, soprattutto, dbo.DeleteExpiredSessions SP ha problemi noti con il blocco. Ad aggravare ulteriormente il problema, il lavoro è stato configurato per eseguire questa procedura, ogni minuto. AspState database è stato ri-creato con l’ .NET 4.0 riga di comando come segue:

    C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql.exe -ssadd
    – sstype c -S OURSERVERNAME -d “AspState” -E

    Criticamente, la versione successiva comprende una performance migliorata versione del DeleteExpiredSessions procedura che incorpora un cursore che consente di eliminare le sessioni scadute uno alla volta. Abbiamo anche cambiato il calendario del processo associato ad eseguire ogni ora invece che ogni minuto.

    Che cosa ottimizzare-aspstate https://sqlperformance.com/2013/01/t-sql-queries/optimize-aspstate ? DeleteExpiredSessions SP NET 4.5 versione don'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
    E 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 Vista: ottimizzare-aspstate https://sqlperformance.com/2013/01/t-sql-queries/optimize-aspstate

    OriginaleL’autore abrown

  5. 2

    Se nessuna delle risposte qui lavoro, quindi controllare connectionString in <configuration> e <sessionState>. Nel mio caso ho aggiornato la stringa di connessione in <configuration> ma non in stato di sessione per puntare a un altro SQL server.

    Semplicemente specificare la corretta stringa di connessione in <sessionState> risolto questo errore stesso.

    questo è stato! Grazie per il suo suggerimento!

    OriginaleL’autore Nitin A.

  6. 1

    Ha il carico maggiore? Si potrebbe avere un sacco di connessioni, perché hai un sacco di più gli utenti che utilizzano il sistema.

    Una cosa che si può fare è ottimizzare la sessione di utilizzo. È possibile specificare se la pagina utilizza lo stato di sessione o se lo fa solo a leggere. Questo può essere un davvero grandi risparmi se si dispone di pagine che non utilizzano o non modificare sessione.

    OriginaleL’autore JoshBerke

Lascia un commento