Pourquoi les sessions Oracle sont toujours actives après deux semaines d'inactivité


16

DB: Oracle 10g

O / S: Windows Server 2003 64 bits

Je recherche la liste des sessions Oracle générées par les applications web (filtrer par programme = w3wp.exe)

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

entrez la description de l'image ici

Selon Logon_Time, pourquoi y a-t-il encore des sessions en cours du 31/07/2012 ou 01/08/2012 ou une session avant aujourd'hui (21/08/2012)?

J'ai configuré sur sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Cela signifie donc que toutes les 20 minutes Oracle vérifie si les connexions sont toujours actives.

Tous les schémas utilisateur ont un profil par défaut. Cela signifierait qu'aucune session n'expirerait ou ne mourrait jamais?

entrez la description de l'image ici

Ajouté en réponse au commentaire de Phil:

entrez la description de l'image ici

Ajouté en réponse à la réponse de Phil:

entrez la description de l'image ici


Qu'est-ce que v$session.PREV_EXEC_STARTpour ces sessions? Je soupçonne qu'ils font partie d'un pool de connexions et ne sont donc pas inactifs car ils sont utilisés fréquemment.
Philᵀᴹ

Le mien est Oracle 10g, donc il n'y a pas de colonne PREV_EXEC_START sur la session v $. Mais j'ai à nouveau interrogé, y compris la colonne Last_Call_ET (j'ai ajouté cette image sur ma question).
Delmonte

J'ai parlé à nos développeurs et ils m'ont dit qu'ils utilisent ODP.NET dans leurs applications Web. Il est donc certain que ces sessions ont été générées dans un pool de connexions. Je ne fais pas entièrement confiance quand Oracle affiche le statut INACTIF, mais dans ce cas ... Pensez-vous que je pourrais tuer des sessions d'il y a deux semaines?
Delmonte

7
Non INACTIVEsignifie simplement qu'aucune instruction SQL n'est en cours d'exécution au moment exact de votre vérification v$session. S'ils font partie d'un pool de connexions, ils font leur travail correctement - le but du pool de connexions est de supprimer le besoin de nombreuses ouvertures / fermetures de session et de conserver des sessions persistantes pour un démarrage rapide (surcharge beaucoup plus importante juste pour exécuter une requête). Je ne comprends pas pourquoi tu t'inquiètes pour ça.
Philᵀᴹ

@Phil - Je voterais volontiers pour une réponse!
Justin Cave

Réponses:


22

Je soupçonne qu'ils font partie d'un pool de connexions et ne sont donc pas inactifs car ils sont utilisés fréquemment.

INACTIVEen v$sessionsignifie simplement qu'il n'y a pas d'instruction SQL en cours d'exécution au moment exact où vous vérifiez v$session.

S'ils font partie d'un pool de connexions, ils font leur travail correctement en étant connectés pendant de longues périodes. L'intérêt du regroupement de connexions est de supprimer le besoin de nombreuses ouvertures / fermetures de session et de conserver des sessions persistantes pour un démarrage rapide des requêtes - il y a un surcoût beaucoup plus important pour ouvrir une requête, puis se déconnecter à chaque fois.

Pour obtenir le dernier temps d'activité pour chaque session:

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;

Je déconseille de tuer des sessions, sauf si vous savez que cela ne causera pas de problèmes du côté de l'application (essayer d'utiliser une session qui a été supprimée, par exemple).

Il se peut que vous examiniez un pool de connexions mal configuré qui crée des centaines de connexions une fois l'application démarrée - le pool de connexions peut être d'un ordre de grandeur plus grand qu'il ne devrait l'être. Je suggère de contacter les développeurs / le personnel de support des applications et de voir comment le pool de connexions est configuré.

Après avoir fait un peu de recherche, w3wp.exe est le processus du pool d'applications IIS - vous voulez presque certainement parler à vos administrateurs de serveur Web IIS pour vous aider à atteindre le bas de la configuration du pool de connexions.


Merci pour votre explication, mais que se passe-t-il si ces valeurs de sessions odp.net augmentent et augmentent en nombre? Je demande v $ resource_limit (ajouté à ma question d'origine) et montre que les valeurs des processus et des sessions atteignent 80% de la limite de valeur. Ces sessions odp.net pourraient consommer les valeurs de mes sessions, atteindre la valeur limite 701 puis abandonner ma connexion à la base de données? (Je sais que je pourrais étendre ces valeurs limites à 1000 ou 2000, mais cela ne fait pas partie de la question)
Delmonte

Vous avez alors un problème d'application.
Philᵀᴹ

Pourquoi? Les applications Web ouvrent, ferment et éliminent la connexion odp.net ... Si je comprends bien, ces sessions odp.net sont toujours en vie en attendant de futures connexions, même si l'application Web les supprime.
Delmonte

Il semble que ce sera un problème de configuration du pool de connexions. Avez-vous représenté graphiquement le nombre (*) de sessions v $ au fil du temps? Avez-vous une licence de pack de diagnostic pour la base de données?
Philᵀᴹ

3
Je suppose que vous vouliez dire IIS (serveur HTTP / app de Microsoft), pas ISS (la Station spatiale internationale) :-)
Justin Cave
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.