Oracle 11g 最大进程/会话/事务限制

问题描述 投票:0回答:1

我在做什么

我正在开发一个包含 OCI 的 Oracle 驱动程序。为了测试它(主要是稳定性和修复内存泄漏),我使用 Oracle Database 11g Express Edition(我不是 Oracle 专家,所以我不知道这是否是适合该工作的版本)。为此,它需要一次提交大量事务:同时提交数十个连接,每个连接维护一个会话池,其中数十个会话同时创建表、插入大量数据并删除表。

无论如何,我很快就遇到了以下错误:

ORA-12516: TNS:listener 找不到匹配的可用处理程序 协议栈

事实证明,这是因为进程/会话/交易限制不够高。网上查了一下,据说可以这样设置:

alter system set processes=1000 scope=spfile;
alter system set sessions=1000 scope=spfile;
alter system set transactions=1000 scope=spfile;

显然,事实比这更复杂,因为这些值的设置是相互依赖的,而且每个版本的工作原理似乎都不同。根据Oracle的文档here,这一切都取决于Processes

SESSIONS 和 TRANSACTIONS 参数的默认值为 从这个参数导出。

且流程无法更改:

可修改否

...同时它正在谈论当你改变它时会发生什么:

因此,如果更改 PROCESSES 的值 [...]

所以这不是很有帮助。或者也许我在这里误解了一些东西。无论如何,使用上面的

alter system
调用我更改了值,并且更改成功。当我拨打这个电话时

(select 'sessions', current_utilization, limit_value from v$resource_limit where resource_name='sessions')
union
(select 'processes', current_utilization, limit_value from v$resource_limit where resource_name='processes')
union
(select 'transactions', current_utilization, limit_value from v$resource_limit where resource_name='transactions');

我得到以下结果:

'SESSIONS'   CURRENT_UTILIZATION LIMIT_VALUE
------------ ------------------- ----------------------------------------
processes                    314       1000
sessions                     317       1524
transactions                   2  UNLIMITED

看起来流程可以更改,与 Oracle 文档所说的不同,会话设置为比

processes * 1.5 + 22
规则(此处描述的)多 2 个,并且事务似乎是无限的。更改是有效的,我现在可以建立更多连接和会话,而不会遇到错误ORA-12516
。到目前为止,一切都很好。

我的问题

我想要更多的连接,所以我尝试将其设置为 10000。但是,当我这样做时,数据库甚至无法正常启动。当我尝试使用 sqlplus 连接到它时,我收到以下消息:

连接到空闲实例

我无法以任何方式使用数据库,并且

startup

也不起作用。我重新安装了数据库,将其设置为 1000,重新启动,然后就成功了。重新安装并重新启动而不更改设置也可以。重新安装它,将其设置为10000,然后重新启动,但是不起作用。这让我相信这些值可以设置多高是有限制的,超过限制将导致数据库无法正常启动。

所以我的问题是:我可以为 Oracle Database 11g Express Edition 设置的最大进程/会话/事务限制是多少?是否有任何因素会影响我可以控制/更改的限制?或者我是否严重误解了这一切并且解决方案完全不同?我运行此程序的机器是运行 Windows 10 的相当强大的机器,因此电源不应该成为问题。除非软件强制执行人为限制,而且我确实在搜索中找到了这样的评论。

提前致谢。

oracle oracle11g oracle-call-interface oracle-xe
1个回答
0
投票
那是因为您可能已达到 RAM 限制或操作系统限制。创建的每个会话都会预留一定量的 RAM,会话取决于进程。

来自 Oracle

词汇表, 会议是:

数据库实例内存中的逻辑实体,代表 当前用户登录数据库的状态。单个连接可以 已在其上建立 0、1 或更多会话。

如果共享服务器被忽略,您很可能会在达到 SESSIONS 参数的限制之前就达到 PROCESSES 参数的限制。

作为最佳实践,逐步增加进程(例如 +200 左右),因为如果将其增加到太高的值(就像您所做的那样),您将无法启动 Oracle 实例。一旦你无法再增加,那就是你的极限了。

© www.soinside.com 2019 - 2024. All rights reserved.