使用SQL查询检查Oracle数据库允许的最大连接数的最佳方式是什么?最终,我想显示当前会话数和总允许数,例如“目前,80个连接中有23个正在使用”。
在确定Oracle数据库支持的连接数时,可能会涉及到几个不同的限制条件。最简单的方法是使用SESSIONS参数和V$SESSION,即:
数据库配置允许的会话数。
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
当前活跃会话数
SELECT COUNT(*)
FROM v$session
就像我之前说的一样,无论是在数据库层面还是操作系统层面,都存在其他潜在的限制条件,这取决于是否已配置共享服务器。如果忽略共享服务器,你很可能在达到SESSIONS参数的限制之前就会达到PROCESSES参数的限制。另外,每个会话都需要一定量的内存,因此你可能会碰到操作系统的限制。
sessions参数是从processes参数派生的,当您更改最大进程数时,该参数会相应地发生变化。有关详细信息,请参阅Oracle文档。
要仅获取有关会话的信息:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
当前使用量 限制值 -------------- ------- 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 ------------- ------------------- --------------- ----------- 进程数 96 309 500 会话数 104 323 792
根据这个来源,我原以为这会奏效。
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'
SQL> show parameter sessions
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
如果您想获取整个群集中的会话总数,请使用gv$session进行RAC操作。
v$resource_limit 视图对我来说非常有趣,可以用来一览 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'
v$session
视图的权限。您需要向数据库管理员请求授予您该权限。最可能的是,您需要通过select any dictionary
特权或者直接授予该对象来获得select_catalog_role
角色。请注意,不要改变原本的意思。 - Justin Cave