[Sql Server 2005] Numero di connessioni che continua ad aumentare

lunedì 31 maggio 2010 - 10.37

GruppoETD Profilo | Newbie

Ciao,
il numero di connessioni @@TRANCOUNT continua ad aumentare fino ad arrivare al numero fatidico di @@MAX_CONNECTIONS e dopodichè non viene più fatto nessun login.
Le mie applicazione sono:
- Web con script perl con connessione ODBC che dovrebbe essere sempre del tipo aperta - chiusa.
- Applicazioni in .net (anche di programmi di cui non conosco il funzionamento ma che vengo a leggere dati)

Come faccio a capire chi apre la connessione e non la chiude?

La versione di Sql Server 2005 è Standard Edition 9.00.3042 su Intelx86.

Grazie a tutti della cortese attenzione

lbenaglia Profilo | Guru

>il numero di connessioni @@TRANCOUNT continua ad aumentare fino
>ad arrivare al numero fatidico di @@MAX_CONNECTIONS e dopodichè
>non viene più fatto nessun login.

Ciao,

@@TRANCOUNT restituisce il numero di transazioni attive per la connessione corrente, non il numero di connessioni aperte (valore che può essere recuperato interrogando la dynamic management view sys.dm_exec_sessions).

>Le mie applicazione sono:
>- Web con script perl con connessione ODBC che dovrebbe essere
>sempre del tipo aperta - chiusa.
>- Applicazioni in .net (anche di programmi di cui non conosco
>il funzionamento ma che vengo a leggere dati)
>
>Come faccio a capire chi apre la connessione e non la chiude?
Puoi conoscere chi ha aperto le connessioni interrogando la sys.dm_exec_sessions (colonne host_name e program_name) ma non puoi recuperare lato server chi non le chiude
Individua le applicazioni che aprono tante connessioni e spulcia il loro codice (verificando anche la dimensione di un eventuale connection pool).

>Grazie a tutti della cortese attenzione
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

Grazie Lorenzo per la tempestiva Risposta,
ti espongo meglio la situazione:

- sul server ho creato un unico oggetto ODBC che viene usato da tutti gli script (perl) di connessione al database lato server
- sul server un programma di terze parti che usa le connessioni di tipo OLE DB
- da remoto un programma che continua a fare select di una vista

La vista che mi hai segnalato non mi fare vedere il numero di connessioni, le righe sono sempre quelle e non cambiano mai.
L'unica cosa che posso vedere cambiare è il tempo di cpu (Che nelle due connessioni da remoto è molto alto) è le letture o scritture

Grazie ancora :-)

lbenaglia Profilo | Guru

>La vista che mi hai segnalato non mi fare vedere il numero di
>connessioni, le righe sono sempre quelle e non cambiano mai.
Dai BOL: "Returns one row per authenticated session on SQL Server. sys.dm_exec_sessions is a server-scope view that shows information about all active user connections and internal tasks."
Si vede che utilizzi un connection pool che mantiene aperte le connessioni in modo da riutilizzarle all'occorrenza.

>L'unica cosa che posso vedere cambiare è il tempo di cpu (Che
>nelle due connessioni da remoto è molto alto) è le letture o
>scritture
???

>Grazie ancora :-)
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

Ciao, ma a livello di database si possono cancellare le connessioni vecchie?
Il report server mi fa accedere alle connessioni in idle.. si potrebbero chiudere queste?

Ultima cosa. sai se esiste un parametro connection timeout che chiude la connessione?

Grazie ancora.

lbenaglia Profilo | Guru

>Ciao, ma a livello di database si possono cancellare le connessioni
>vecchie?
Con il comando KILL <spid>

>Il report server mi fa accedere alle connessioni in idle.. si
>potrebbero chiudere queste?
Il problema non è cancellare quelle in idle, ma capire perché ne hai tante.

>Ultima cosa. sai se esiste un parametro connection timeout che
>chiude la connessione?
No. La proprietà ConnectionTimeout definisce il tempo massimo di apertura di una connessione, superato il quale viene restituito un errore.

>Grazie ancora.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

Ciao, adesso sto cercando di isolare ogni richiesta di connessione.
Devo lavorare in locale, perchè il server di cui parlo è in produzione.

Sul mio portatile se avvio sql server express 2005 SP2, avvio Management Studio e lancio query
select @@MAX_CONNECTIONS, @@CONNECTIONS
--exec sp_who active
--exec sp_who2 active

mi da come risultato 32768, 34

Sono tante 34 connessioni? solo del Management Stduio?
Inoltre se chiudo e riapro il Managemen Studio le connessioni e rilancio la stessa query di prima, le connessioni sono aumentate a 36 e se ripeto trovo sempre le connessioni aumentate di 2.

E normale che il mio sistema si comporti in questo modo? Che non chiuda tutte le connessioni aperte?

Grazie Ancora.

lbenaglia Profilo | Guru

>Ciao, adesso sto cercando di isolare ogni richiesta di connessione.
>Devo lavorare in locale, perchè il server di cui parlo è in produzione.
>
>Sul mio portatile se avvio sql server express 2005 SP2, avvio
>Management Studio e lancio query
>select @@MAX_CONNECTIONS, @@CONNECTIONS
>--exec sp_who active
>--exec sp_who2 active
>
>mi da come risultato 32768, 34
>
>Sono tante 34 connessioni?
Non hai 34 connessioni, ma da quando hai avviato l'istanza sono stati eseguiti 34 tentativi di connessione (riusciti o meno).
Dai BOL @@CONNECTIONS: "Returns the number of attempted connections, either successful or unsuccessful since SQL Server was last started".

Lo ripeto, per avere il numero di connessioni devi interrogare la dynamic management view sys.dm_exec_sessions (oppure anche le vecchie sp_who, sp_who2):

SELECT * FROM sys.dm_exec_sessions;

In locale sul mio notebook ne ho 27, quelle di sistema + 3 di SSMS + 1 dei Reporting Services.

>Inoltre se chiudo e riapro il Managemen Studio le connessioni
>e rilancio la stessa query di prima, le connessioni sono aumentate
>a 36 e se ripeto trovo sempre le connessioni aumentate di 2.
>
>E normale che il mio sistema si comporti in questo modo? Che
>non chiuda tutte le connessioni aperte?
Il numero aumenta perché stai interrogado la funzione @@CONNECTIONS. Interroga la sys.dm_exec_sessions e vedrai che rimarranno uguali.

>Grazie Ancora.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

Ciao scusa ma da quello che hai scritto penso proprio di aver fatto un bel po di confusione.

Diciamo che tutto nasce dal fatto che negli ultimi dieci giorno sql server mi va in uno stato in cui non fa + il login e da un errore 10054.
A questo punto bisogna per forza riavviare il servizio Sql Server.
Dopo varie ricerche in internet che non hanno portato a niente mi sono messo a controllare le connessioni.
L'unico parametro strano è @@CONNECTIONS che credevo indicasse le connessioni relamente attive e non solo il numero di connessioni eseguite.
Mentre il comando che mi ha indicato tu con la vista di sistema (o l'activity monitor) indica solo una decina di processi.

Questo è un bene per le connessioni ma mi riporta alla strada buia dell'errore 10054 (che nei forum portava a problemi con i certificati).

Intanto ti ringrazio ancora.

lbenaglia Profilo | Guru

>Diciamo che tutto nasce dal fatto che negli ultimi dieci giorno
>sql server mi va in uno stato in cui non fa + il login e da un
>errore 10054.

Qual è il messaggio d'errore completo?
Lo puoi recuperare dall'event log o dal log di SQL Server?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

error occurred during the pre-login handshake. (provider: TCP Provider: 0 -
an existing connection was forcibly closed by the remote host.) (microsoft
SQL server, Error: 10054)"

GruppoETD Profilo | Newbie

Il precedente è l'errore a video di Management Studio ( non fa più aprire nessuna proprieta/ menu/finestra).

Scusa mi sono dimenticato di dirti:
Sistema operativo Windows 2003 RS2 Server English in macchina virtuale ESXi 3.5

questo è il log effettivo l'ordine cronologico è dal basso verso l'alto:
Date 5/27/2010 9:33:22 AM
Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)

Message
[382] Logon to server '(local)' failed (SaveAllSchedules)
------------------------------------------------------------------------------------------------------------------
Date 5/27/2010 9:33:22 AM
Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)

Message
[298] SQLServer Error: 10054, Client unable to establish connection [SQLSTATE 08001]
------------------------------------------------------------------------------------------------------------------
Date 5/27/2010 9:33:22 AM
Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)

Message
[298] SQLServer Error: 10054, TCP Provider: An existing connection was forcibly closed by the remote host. [SQLSTATE 08001]
------------------------------------------------------------------------------------------------------------------
Date 5/27/2010 9:33:20 AM
Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)

Message
[131] SQLSERVERAGENT service stopping due to a stop request from a user, process, or the OS...

lbenaglia Profilo | Guru

>questo è il log effettivo l'ordine cronologico è dal basso verso
>l'alto:
>Date 5/27/2010 9:33:22 AM
>Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)
>
>Message
>[382] Logon to server '(local)' failed (SaveAllSchedules)

Per forza, l'Agent è fermo.

>------------------------------------------------------------------------------------------------------------------
>Date 5/27/2010 9:33:22 AM
>Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)
>
>Message
>[298] SQLServer Error: 10054, Client unable to establish connection
>[SQLSTATE 08001]
Idem.

>------------------------------------------------------------------------------------------------------------------
>Date 5/27/2010 9:33:22 AM
>Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)
>
>Message
>[298] SQLServer Error: 10054, TCP Provider: An existing connection
>was forcibly closed by the remote host. [SQLSTATE 08001]
>------------------------------------------------------------------------------------------------------------------
>Date 5/27/2010 9:33:20 AM
>Log SQL Agent (Archive #2 - 5/27/2010 9:33:00 AM)
>
>Message
>[131] SQLSERVERAGENT service stopping due to a stop request from
>a user, process, or the OS...
Qualcuno/qualcosa ha fermato il SQL Server Agent.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

Ma scusa non è l'agent che fa il Login.
Adesso sto lavorando senza l'Agent attivo.

lbenaglia Profilo | Guru

>Ma scusa non è l'agent che fa il Login.
Dipende, se l'agent ha un job schedulato allora è lui ad autenticarsi al DBEngine.

>Adesso sto lavorando senza l'Agent attivo.
Eh, quindi?
Cosa dicono i logs di SQL Server?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

GruppoETD Profilo | Newbie

nei log non c'è traccia. :-(
Ne windows ne SQL
l'unico appiglio è il primo messaggio di errore che ho postato.

error occurred during the pre-login handshake. (provider: TCP Provider: 0 -
an existing connection was forcibly closed by the remote host.) (microsoft
SQL server, Error: 10054)"

Quando inizia a dare questo errore, le connessioni attive rimango utilizzabili ma non crea nuove connessioni.
Per questo mi sembrava che quadrasse il crescere del numero @@CONNECTIONS provocasse un errore al raggiungimento di @@MAX_CONNECTIONS.


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5