Dlaczego sesje Oracle są nadal aktywne po dwóch tygodniach braku aktywności

16

DB: Oracle 10g

O / S: Windows Server 2003 64 bity

Przeszukuję listę sesji Oracle generowanych przez aplikacje internetowe (filtruj według programu = w3wp.exe)

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

wprowadź opis zdjęcia tutaj

Według Logon_Time, dlaczego nadal istnieją sesje od 31/07/2012 lub 01/08/2012 lub jakakolwiek sesja przed dniem dzisiejszym (21/08/2012)?

Skonfigurowałem na sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Więc to oznacza, że ​​co 20 minut Oracle sprawdza, czy połączenia są nadal aktywne.

Wszystkie schematy użytkownika mają profil domyślny. Oznaczałoby to, że żadna sesja nigdy nie wygasa ani nie umrze?

wprowadź opis zdjęcia tutaj

Dodano w odpowiedzi na komentarz Phila:

wprowadź opis zdjęcia tutaj

Dodano w odpowiedzi na odpowiedź Phila:

wprowadź opis zdjęcia tutaj

Delmonte
źródło
Co jest v$session.PREV_EXEC_STARTna te sesje? Podejrzewam, że są częścią puli połączeń i dlatego nie wyłączyli się, ponieważ są często używane.
Philᵀᴹ
Mój to Oracle 10g, więc nie ma kolumny PREV_EXEC_START w sesji v $. Ale mam ponownie zapytanie, w tym kolumnę Last_Call_ET (dodałem to zdjęcie do mojego pytania).
Delmonte,
Rozmawiałem z naszymi programistami, którzy powiedzieli mi, że używają ODP.NET w swoich aplikacjach internetowych. Jest więc pewne, że sesje te zostały wygenerowane w puli połączeń. Nie ufam całkowicie, gdy Oracle pokazuje stan NIEAKTYWNY, ale w tym przypadku ... Czy myślisz, że mógłbym zabić sesje sprzed dwóch tygodni?
Delmonte,
7
Nie. INACTIVEOznacza tylko, że nie jest wykonywana instrukcja SQL dokładnie w momencie sprawdzania v$session. Jeśli są częścią puli połączeń, wykonują swoją pracę prawidłowo - celem całej puli połączeń jest wyeliminowanie potrzeby wielu logowania / wylogowywania i utrzymywanie trwałych sesji w celu szybkiego uruchamiania (znacznie większe logowanie ogólne ponownie i ponownie wystarczy wykonać jedno zapytanie). Nie rozumiem, dlaczego się o to martwisz.
Philᵀᴹ
@Phil - chętnie głosuję za odpowiedzią!
Justin Cave

Odpowiedzi:

22

Podejrzewam, że są częścią puli połączeń i dlatego nie wyłączyli się, ponieważ są często używane.

INACTIVEw v$sessionpo prostu oznacza, że nie jest to instrukcja SQL wykonywane w momencie, sprawdzając v$session.

Jeśli należą do puli połączeń, prawidłowo wykonują swoją pracę, logując się przez długi czas. Głównym celem pulowania połączeń jest wyeliminowanie konieczności logowania się i wylogowywania oraz utrzymywanie trwałych sesji w celu szybkiego uruchamiania zapytań - istnieje znacznie większe ogólne obciążenie logowania w celu wykonania jednego zapytania, a następnie rozłączanie się za każdym razem.

Aby uzyskać czas ostatniej aktywności dla każdej sesji:

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;

Odradzam zabijanie sesji, chyba że wiesz, że nie spowoduje to problemów po stronie aplikacji (na przykład próby użycia sesji, która została zabita).

Może się zdarzyć, że patrzysz na niepoprawnie skonfigurowaną pulę połączeń, która tworzy setki połączeń po uruchomieniu aplikacji - pula połączeń może być o rząd wielkości większa niż powinna. Sugeruję skontaktowanie się z programistami / pracownikami wsparcia aplikacji i przyjrzenie się konfiguracji puli połączeń.

Po przeprowadzeniu drobnych badań w3wp.exe jest procesem puli aplikacji IIS - prawie na pewno chcesz porozmawiać z administratorami serwera IIS, aby uzyskać pomoc w konfiguracji puli połączeń.

Philᵀᴹ
źródło
Dziękuję za wyjaśnienie, ale co jeśli te sesje odp.net rosną i rosną w liczbach? Pytam v $ resource_limit (dodane w moim pierwotnym pytaniu) i pokazuje, że wartości procesów i sesji osiągają 80% limitu wartości. Te sesje odp.net mogą zużywać moje wartości sesji, osiągnąć wartość graniczną 701, a następnie porzucić połączenie z bazą danych? (Wiem, że mogłem rozszerzyć te wartości graniczne do 1000 lub 2000, ale to nie jest część pytania)
Delmonte
Masz problem z aplikacją.
Philᵀᴹ
Dlaczego? Aplikacje internetowe otwierają, zamykają i usuwają połączenie odp.net ... Jak rozumiem, te sesje odp.net wciąż żyją, czekając na przyszłe połączenia, nawet jeśli aplikacja internetowa je pozbywa.
Delmonte,
Wygląda na to, że będzie to problem z konfiguracją puli połączeń. Czy wykreśliłeś liczbę (*) sesji v $ w czasie? Czy masz licencję na pakiet diagnostyczny dla bazy danych?
Philᵀᴹ
3
Zakładam, że miałeś na myśli IIS (serwer HTTP / aplikacji Microsoftu), a nie ISS (Międzynarodowa Stacja Kosmiczna) :-)
Justin Cave