W jaki sposób najlepiej sprawdzić maksymalną liczbę połączeń dozwolonych dla bazy danych Oracle przy użyciu języka SQL? Na koniec chciałbym pokazać aktualną liczbę sesji oraz łączną dozwoloną liczbę np. „Obecnie używane są 23 z 80 połączeń”.
W jaki sposób najlepiej sprawdzić maksymalną liczbę połączeń dozwolonych dla bazy danych Oracle przy użyciu języka SQL? Na koniec chciałbym pokazać aktualną liczbę sesji oraz łączną dozwoloną liczbę np. „Obecnie używane są 23 z 80 połączeń”.
Odpowiedzi:
Istnieje kilka różnych ograniczeń, które mogą wpłynąć na określenie liczby połączeń obsługiwanych przez bazę danych Oracle. Najprostszym podejściem byłoby użycie parametru SESSIONS i V $ SESSION, czyli
Liczba sesji, na które baza danych została skonfigurowana
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Liczba aktualnie aktywnych sesji
SELECT COUNT(*)
FROM v$session
Jak powiedziałem, istnieją jednak inne potencjalne ograniczenia, zarówno na poziomie bazy danych, jak i na poziomie systemu operacyjnego oraz w zależności od tego, czy skonfigurowano serwer współdzielony. Jeśli serwer współdzielony jest ignorowany, możesz przekroczyć limit parametru PROCESSES, zanim osiągniesz limit parametru SESSIONS. Możesz też przekroczyć ograniczenia systemu operacyjnego, ponieważ każda sesja wymaga określonej ilości pamięci RAM.
v$session
widoku. Musisz poprosić swojego administratora o przyznanie Ci tego przywileju. Najprawdopodobniej chciałbyś mieć select any dictionary
przywilej, chociaż select_catalog_role
rola lub bezpośrednie nadanie tylko dla tego obiektu również działałoby.
Te sesje parametr jest pochodną procesów parametru i zmienia się odpowiednio w przypadku zmiany liczby procesów max. Więcej informacji można znaleźć w dokumentacji Oracle .
Aby uzyskać tylko informacje o sesjach:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE ------------------- ----------- 110 792,
Spróbuj tego, aby wyświetlić informacje o obu:
select resource_name, current_utilization, max_utilization, limit_value
from v$resource_limit
where resource_name in ('sessions', 'processes');
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE ------------- ------------------- --------------- --- -------- przetwarza 96309 500 sesje 104 323 792
Myślałem, że to zadziała, opierając się na tym źródle .
SELECT
'Currently, '
|| (SELECT COUNT(*) FROM V$SESSION)
|| ' out of '
|| DECODE(VL.SESSIONS_MAX,0,'unlimited',VL.SESSIONS_MAX)
|| ' connections are used.' AS USAGE_MESSAGE
FROM
V$LICENSE VL
Jednak Justin Cave ma rację. To zapytanie daje lepsze wyniki:
SELECT
'Currently, '
|| (SELECT COUNT(*) FROM V$SESSION)
|| ' out of '
|| VP.VALUE
|| ' connections are used.' AS USAGE_MESSAGE
FROM
V$PARAMETER VP
WHERE VP.NAME = 'sessions'
Uwaga: to tylko odpowiada na część pytania.
Jeśli chcesz tylko poznać maksymalną dozwoloną liczbę sesji, możesz wykonać w sqlplus, jako sysdba:
SQL> show parameter sessions
Daje to wynik podobny do:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
sessions integer 248
shared_server_sessions integer
Parametr sesji jest tym, czego chcesz.
v Widok $ resource_limit jest dla mnie tak interesujący, żebym mógł rzucić okiem na sesje i procesy oracle ..:
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'