Oracle veritabanı için izin verilen maksimum bağlantı sayısını kontrol etmenin en iyi yolu SQL kullanmaktır? Sonunda, mevcut oturum sayısını ve izin verilen toplam sayıyı göstermek istiyorum, örneğin "Şu anda 80 bağlantıdan 23'ü kullanılıyor".
Oracle veritabanı için izin verilen maksimum bağlantı sayısını kontrol etmenin en iyi yolu SQL kullanmaktır? Sonunda, mevcut oturum sayısını ve izin verilen toplam sayıyı göstermek istiyorum, örneğin "Şu anda 80 bağlantıdan 23'ü kullanılıyor".
Yanıtlar:
Bir Oracle veritabanının desteklediği bağlantıların sayısını belirlemede devreye girebilecek birkaç farklı sınır vardır. En basit yaklaşım SESSIONS parametresini ve V $ SESSION'ı kullanmaktır, yani
Veritabanının izin vermek üzere yapılandırıldığı oturum sayısı
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Şu anda aktif olan oturumların sayısı
SELECT COUNT(*)
FROM v$session
Yine de söylediğim gibi, hem veritabanı düzeyinde hem de işletim sistemi düzeyinde ve paylaşılan sunucunun yapılandırılıp yapılandırılmadığına bağlı olarak başka olası sınırlar da vardır. Paylaşılan sunucu göz ardı edilirse, SESSIONS parametresinin sınırına ulaşmadan önce PROCESSES parametresinin sınırına ulaşabilirsin. Ayrıca, her oturum belirli bir miktarda RAM gerektirdiği için işletim sistemi sınırlarına ulaşabilirsiniz.
v$sessiongörünümde ayrıcalıklara sahip olmadığı anlamına gelir . DBA'nızdan size bu ayrıcalığı vermesini istemeniz gerekir. Büyük olasılıkla, sadece o nesne üzerindeki rol veya doğrudan hibe de işe select any dictionaryyarasa da , ayrıcalık select_catalog_roleistersiniz.
Seans parametresi, süreçler parametresinden türetilir ve maks. İşlem sayısını değiştirdiğinizde buna göre değişir. Daha fazla bilgi için Oracle belgelerine bakın .
Yalnızca oturumlar hakkında bilgi almak için:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE
------------------- -----------
110 792
Her ikisi hakkında bilgi göstermek için şunu deneyin:
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 ------------- ------------------- --------------- --- -------- işlemler 96 309 500 oturumlar 104 323 792
Bu kaynağa dayanarak bunun işe yarayacağını düşündüm .
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
Ancak Justin Cave haklı. Bu sorgu daha iyi sonuçlar verir:
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'
Not: Bu, sorunun yalnızca bir kısmını yanıtlar.
Sadece izin verilen maksimum oturum sayısını bilmek istiyorsanız, o zaman sqlplus'ta sysdba olarak çalıştırabilirsiniz:
SQL> show parameter sessions
Bu size aşağıdaki gibi bir çıktı verir:
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
Oturumlar parametresi, istediğiniz parametredir.
v $ resource_limit görünümü, oracle oturumlarına, işlemlerine göz atmak için benim için çok ilginç ..:
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'