使用SQL检查Oracle数据库允许的最大连接数的最佳方法是什么?最后,我想显示当前的会话数和允许的总数,例如"目前,使用了80个连接中的23个".
在确定Oracle数据库支持的连接数时,可能会有一些不同的限制.最简单的方法是使用SESSIONS参数和V $ SESSION,即
数据库配置为允许的会话数
SELECT name, value FROM v$parameter WHERE name = 'sessions'
当前活动的会话数
SELECT COUNT(*) FROM v$session
正如我所说,在数据库级别和操作系统级别还有其他潜在限制,具体取决于是否已配置共享服务器.如果忽略共享服务器,则在达到SESSIONS参数的限制之前,您可能会达到PROCESSES参数的限制.并且您可能会达到操作系统限制,因为每个会话都需要一定量的RAM.
基于这个来源,我认为这会有效.
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
然而,Justin Cave是对的.此查询提供了更好的结果:
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'
该会话参数从衍生过程,当你改变最大进程数参数,并相应地改变.有关详细信息,请参阅Oracle文档.
仅获取有关会话的信息:
select current_utilization, limit_value from v$resource_limit where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE ------------------- ----------- 110 792
试试这个来显示两者的信息:
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 ------------- ------------------- --------------- ----------- processes 96 309 500 sessions 104 323 792