Warum Oracle-Sitzungen nach zwei Wochen Inaktivität noch aktiv sind


16

DB: Oracle 10g

Betriebssystem: Windows Server 2003 64-Bit

Ich frage eine Liste von Oracle-Sitzungen ab, die von Webanwendungen generiert wurden (Filter nach Programm = w3wp.exe)

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

Bildbeschreibung hier eingeben

Warum sind laut Logon_Time noch Sitzungen vom 31.07.2012 oder 01.08.2012 oder eine Sitzung vor dem heutigen Tag (21.08.2012) aktiv?

Ich habe auf sqlnet.ora konfiguriert: SQLNET.EXPIRE_TIME = 20 Das bedeutet, dass Oracle alle 20 Minuten überprüft, ob noch Verbindungen aktiv sind.

Alle Benutzerschemata haben ein Standardprofil. Es würde bedeuten, dass keine Sitzung nie abgelaufen wäre oder sterben würde?

Bildbeschreibung hier eingeben

Als Antwort auf Phils Kommentar hinzugefügt:

Bildbeschreibung hier eingeben

Als Antwort auf Phils Antwort hinzugefügt:

Bildbeschreibung hier eingeben


Was ist v$session.PREV_EXEC_STARTfür diese Sitzungen? Ich vermute, dass sie Teil eines Verbindungspools sind und daher nicht im Leerlauf sind, weil sie häufig verwendet werden.
Philᵀᴹ

Meins ist Oracle 10g, es gibt also keine PREV_EXEC_START-Spalte in v $ session. Aber ich habe wieder eine Abfrage mit der Last_Call_ET-Spalte (ich habe dieses Bild zu meiner Frage hinzugefügt).
Delmonte

Ich habe mit unseren Entwicklern gesprochen und sie haben mir gesagt, dass sie ODP.NET in ihren Web-Apps verwenden. Es ist also sicher, dass diese Sitzungen in einem Verbindungspool generiert wurden. Ich vertraue nicht ganz, wenn Oracle den Status INACTIVE anzeigt, aber in diesem Fall ... Glaubst du, ich könnte Sitzungen von vor zwei Wochen beenden?
Delmonte

7
Nein. INACTIVEBedeutet lediglich, dass keine SQL-Anweisung zum exakten Zeitpunkt Ihrer Überprüfung ausgeführt wird v$session. Wenn sie Teil eines Verbindungspools sind, erledigen sie ihre Arbeit ordnungsgemäß. Der springende Punkt beim Verbindungspooling ist es, viele An- und Abmeldungen zu vermeiden und dauerhafte Sitzungen für einen schnellen Start aufrechtzuerhalten (viel mehr Overhead beim erneuten Anmelden) nur um eine Abfrage auszuführen). Ich verstehe nicht, warum du dir darüber Sorgen machst.
Philᵀᴹ

@Phil - Ich würde das gerne als Antwort bewerten!
Justin Cave

Antworten:


22

Ich vermute, dass sie Teil eines Verbindungspools sind und daher nicht im Leerlauf sind, weil sie häufig verwendet werden.

INACTIVEin v$sessionnur bedeutet , dass Sie versuchen Sie es zu genau in dem Moment ausgeführt wird , nicht eine SQL - Anweisung ist es v$session.

Wenn sie Teil eines Verbindungspools sind, erledigen sie ihre Aufgabe ordnungsgemäß, indem sie für längere Zeit angemeldet sind. Der springende Punkt beim Verbindungspooling ist es, die Notwendigkeit vieler An- und Abmeldungen zu beseitigen und dauerhafte Sitzungen für einen schnellen Abfragestart beizubehalten. Es ist ein viel größerer Aufwand für die Anmeldung erforderlich, um eine Abfrage auszuführen und die Verbindung jedes Mal zu trennen.

So rufen Sie die letzte Aktivitätszeit für jede Sitzung ab:

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;

Ich rate davon ab, Sitzungen zu beenden, es sei denn, Sie wissen, dass dies keine Probleme auf der Anwendungsseite verursacht (z. B. wenn Sie versuchen, eine Sitzung zu verwenden, die beendet wurde).

Möglicherweise handelt es sich um einen falsch konfigurierten Verbindungspool, der nach dem Start der App Hunderte von Verbindungen herstellt. Der Verbindungspool ist möglicherweise um eine Größenordnung größer als erforderlich. Ich empfehle, sich an die Entwickler / Anwendungs-Support-Mitarbeiter zu wenden und einen Blick auf die Konfiguration des Verbindungspools zu werfen.

Nachdem Sie ein wenig recherchiert haben, ist w3wp.exe der IIS-Anwendungspoolprozess. Sie möchten mit ziemlicher Sicherheit mit Ihren IIS-Webserveradministratoren sprechen, um die Konfiguration des Verbindungspools zu erläutern.


Vielen Dank für Ihre Erklärung, aber was ist, wenn die Werte für diese odp.net-Sitzungen immer größer werden? Ich frage v $ resource_limit ab (hinzugefügt bei meiner ursprünglichen Frage) und zeige, dass Prozesse und Sitzungswerte 80% des Wertlimits erreichen. Diese odp.net-Sitzungen könnten meine Sitzungswerte verbrauchen, den Grenzwert von 701 erreichen und dann meine Datenbankverbindung trennen. (Ich weiß, dass ich diese Grenzwerte auf 1000 oder 2000
ausweiten könnte

Dann haben Sie ein Anwendungsproblem.
Philᵀᴹ

Warum? Webanwendungen öffnen, schließen und trennen die odp.net-Verbindung ... Soweit ich weiß, warten diese odp.net-Sitzungen nur noch auf zukünftige Verbindungen, selbst wenn sie von der Webanwendung getrennt werden.
Delmonte

Es sieht so aus, als würde es sich um ein Problem bei der Konfiguration des Verbindungspools handeln. Haben Sie die Anzahl (*) der v $ -Sitzungen im Laufe der Zeit grafisch dargestellt? Haben Sie eine Diagnosepaketlizenz für die DB?
Philᵀᴹ

3
Ich nehme an, Sie meinten IIS (Microsofts HTTP / App-Server), nicht ISS (die Internationale Raumstation) :-)
Justin Cave
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.