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



我在做什么

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

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

ORA-12516:TNS:侦听器找不到具有匹配的可用处理程序 协议栈

事实证明,这是因为进程/会话/事务限制不够高。在互联网上搜索时,我被告知它们可以这样设置:

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

显然,事实比这更复杂,因为这些值是相互设置的,并且每个版本的工作方式似乎都不同。根据 Oracle 的文档,这一切都取决于流程

会话和事务参数的默认值为 派生自此参数。

并且流程无法更改:

可修改编号

。同时,它正在谈论当您更改它时会发生什么:

因此,如果您更改进程的值 [...]

所以这不是很有帮助。或者也许我在这里误解了什么。无论如何,使用上面的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的相当强大的机器,所以电源应该不是问题。除非软件正在执行人为限制,并且我确实在搜索中找到了这样的评论。

提前谢谢。

那是因为您可能已经达到了 RAM 限制或操作系统限制。创建的每个会话都将保留一定数量的 RAM,会话取决于进程。

来自甲骨文词汇表, 会话是:

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

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

作为最佳实践,以增量方式增加进程(例如 +200 左右(,因为如果像以前那样将其增加到过高的值,您将无法启动 Oracle 实例。一旦你不能再增加,那就是你的极限。

最新更新