Perché le sessioni Oracle sono ancora attive dopo due settimane di inattività


16

DB: Oracle 10g

O / S: Windows Server 2003 64 bit

Richiedo l'elenco delle sessioni Oracle generate dalle applicazioni Web (filtro per programma = w3wp.exe)

select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time

inserisci qui la descrizione dell'immagine

Secondo Logon_Time, perché sono ancora attive le sessioni dal 31/07/2012 o dal 01/08/2012 o da qualsiasi sessione prima di oggi (21/08/2012)?

Ho configurato su sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Quindi significa che ogni 20 minuti Oracle verifica se le connessioni sono ancora attive.

Tutti gli schemi utente hanno un profilo predefinito. Significherebbe che nessuna sessione non sarebbe mai scaduta o morta?

inserisci qui la descrizione dell'immagine

Aggiunto in risposta al commento di Phil:

inserisci qui la descrizione dell'immagine

Aggiunto in risposta alla risposta di Phil:

inserisci qui la descrizione dell'immagine


Cosa sono v$session.PREV_EXEC_STARTqueste sessioni? Ho il sospetto che facciano parte di un pool di connessioni e quindi non siano inattivi perché vengono utilizzati frequentemente.
Philᵀᴹ

Il mio è Oracle 10g, quindi non esiste una colonna PREV_EXEC_START sulla sessione $ v. Ma ho di nuovo una query inclusa la colonna Last_Call_ET (ho aggiunto quella foto alla mia domanda).
Delmonte,

Ho parlato con i nostri sviluppatori e mi hanno detto che stanno usando ODP.NET nelle loro app web. Quindi è certo che quelle sessioni sono state generate in un pool di connessioni. Non mi fido completamente quando Oracle mostra lo stato INATTIVO, ma in questo caso ... Pensi che potrei uccidere sessioni di due settimane fa?
Delmonte,

7
No. INACTIVEsignifica semplicemente che non è in esecuzione un'istruzione SQL nel momento esatto in cui controlli v$session. Se fanno parte di un pool di connessioni stanno svolgendo correttamente il loro lavoro - l'intero punto del pool di connessioni è rimuovere la necessità di molti accessi / disconnessioni e mantenere sessioni persistenti per un avvio rapido (accesso overhead molto più grande ancora e ancora solo per eseguire una query). Non capisco perché sei preoccupato per questo.
Philᵀᴹ

@Phil - Sarei felice di votarlo come una risposta!
Grotta di Giustino,

Risposte:


22

Ho il sospetto che facciano parte di un pool di connessioni e quindi non siano inattivi perché vengono utilizzati frequentemente.

INACTIVEnel v$sessionsolo significa che non v'è una dichiarazione di SQL in esecuzione nel momento esatto del check v$session.

Se fanno parte di un pool di connessioni, svolgono correttamente il proprio lavoro effettuando l'accesso per lunghi periodi di tempo. L'intero punto del pool di connessioni è rimuovere la necessità di molti accessi / disconnessioni e mantenere sessioni persistenti per un avvio rapido delle query - c'è un accesso overhead molto più grande per eseguire una query, quindi disconnettersi ogni volta.

Per ottenere l'orario dell'ultima attività per ogni sessione:

select username, UPPER(program), logon_time, 
       floor(last_call_et / 60) "Minutes since active", status
from v$session
where UPPER(program) LIKE '%W3%'
order by last_call_et;

Sconsigliamo di uccidere sessioni a meno che tu non sappia che farlo non causerà problemi sul lato dell'applicazione (tentando di utilizzare una sessione che è stata uccisa, ad esempio).

È possibile che tu stia osservando un pool di connessioni configurato in modo errato che crea centinaia di connessioni una volta avviata l'app: il pool di connessioni potrebbe avere un ordine di grandezza più grande di quello che deve essere. Suggerisco di contattare lo staff di supporto per sviluppatori / applicazioni e dare un'occhiata a come è configurato il pool di connessioni.

Dopo aver fatto un po 'di ricerche, w3wp.exe è il processo del pool di applicazioni IIS: quasi sicuramente vorresti parlare con gli amministratori del tuo server web IIS per aiutarti a raggiungere il fondo della configurazione del pool di connessioni.


Grazie per la tua spiegazione, ma cosa succede se quei valori delle sessioni di odp.net stanno crescendo e crescendo in numero? Interrogo v $ resource_limit (aggiunto alla mia domanda originale) e mostra che i valori di processi e sessioni stanno raggiungendo l'80% del limite di valore. Quelle sessioni di odp.net potrebbero consumare i valori delle mie sessioni, raggiungere il valore limite di 701 e quindi eliminare la mia connessione al database? (So ​​che potrei estendere questi valori limite a 1000 o 2000, ma non fa parte della domanda)
Delmonte

Quindi hai un problema con l'applicazione.
Philᵀᴹ

Perché? Le applicazioni Web stanno aprendo, chiudendo e eliminando la connessione odp.net ... A quanto ho capito, quelle sessioni odp.net sono ancora in vita in attesa di connessioni future, anche se l'applicazione web le dispone.
Delmonte,

Sembra che sarà un problema di configurazione del pool di connessioni. Hai rappresentato graficamente un conteggio (*) di v $ session nel tempo? Possiedi una licenza per pacchetto diagnostico per il DB?
Philᵀᴹ

3
Suppongo che intendevi IIS (server HTTP / app di Microsoft), non ISS (International Space Station) :-)
Justin Cave
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.