【发布时间】:2010-09-14 19:18:28
【问题描述】:
使用 SQL 检查 Oracle 数据库允许的最大连接数的最佳方法是什么?最后,我想显示当前的会话数和允许的总数,例如“目前,使用了 80 个连接中的 23 个”。
【问题讨论】:
使用 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。
【讨论】:
v$session 视图的权限。您需要让您的 DBA 授予您该权限。最有可能的是,尽管select_catalog_role 角色或仅对该对象的直接授权也可以工作,但您需要select any dictionary 特权。
sessions 参数派生自 processes 参数,并在您更改最大进程数时相应更改。请参阅Oracle docs 了解更多信息。
仅获取有关会话的信息:
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
------------- -------- --------------- --- --------
处理 96 309 500
会议 104 323 792
【讨论】:
我认为这会起作用,基于this source。
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
但是,贾斯汀凯夫是对的。这个查询给出了更好的结果:
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'
【讨论】:
注意:这只回答了部分问题。
如果你只是想知道允许的最大会话数,那么你可以在sqlplus中执行,as sysdba:
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
sessions 参数是你想要的。
【讨论】:
如果您想获取整个集群的会话总数,请为 RAC 使用 gv$session。
【讨论】:
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'
【讨论】: