Oracle会话和连接池之间的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle会话和连接池之间的关系相关的知识,希望对你有一定的参考价值。

让我先解释一下这个设置。

我们有一台运行在2GB RAM机器上的oracle服务器。 Db实例的init参数“sessions”设置为160。

我们在Websphere 6.1上部署了该应用程序。连接池设置为Min 50和Max 150。

当我们在40个用户上运行Load test(并发,使用jMeter)时,一切都很顺利。但是当我们将concurent用户增加到Beyond 60时,Oracle会抛出异常,因为它不在会话中。

我们检查了应用程序是否有任何连接泄漏,但找不到任何连接泄漏。

那么它是否意味着40的并发性是这个设置可以采取的?增加Oracle会话/进程是获得更高并发性的唯一方法吗?

连接池中的数据库会话和连接到底有何关联?根据我的理解,连接不能超过会话,因此将Max Connection池设置为多于会话可能并不重要。那是对的吗 ?

答案

在Google图书上查看这个book。它解释了连接和会话之间的差异。

另一答案

Metalink提供了有关SESSIONS参数的以下建议:

递归会话是RDBMS正常运行的重要部分。无法识别需要此类会话的每种情况,但一般而言,如果用户启动的操作需要操纵数据字典对象,则可能会创建递归会话。举一个简单的例子,假设您以普通用户身份登录时创建了一个表。在幕后,这必须将行插入到SYS用户拥有的obj $,tab $ etc中。由于普通用户没有权限插入这些对象,因此会创建一个以SYS身份登录的递归会话。

解:

增加SESSIONS参数。

建议是为递归会话保留50%的SESSIONS值。因此,例如,如果预期打开30个客户端会话,则将SESSIONS参数设置为60。

因此,根据websphere和您的用户进程所做的事情,这可以部分解释您所看到的内容。

另一答案

您的所有连接是否都使用相同的用户帐户?如果是这样,您可能需要检查是否有该用户帐户的每用户会话限制。

此外,您是否获得超过40个连接的许可? (检查您的参数文件中是否设置了LICENSE_MAX_SESSION)

另一答案

会话池由客户端驱动。它不知道(或控制)数据库允许的会话数。

您应该查看服务器以确定允许的实际连接数,并根据服务器允许的内容设置会话池数。

您的连接池不应使用所有允许的连接。这将允许其他ID连接。如果你有一个使用USER_1的应用程序,你可以设置连接池使用一些允许的连接,但留下足够的连接...哦,比如说DBA要登录。

- 编辑 - 在连接池最大化之前,进程可能已用完。

SQL> show parameter processes

NAME                                 TYPE        VALUE
--------------------------------------------------------------------------------
processes                            integer     40

这是允许的进程总数现在看看已经使用了多少进程 - 其中许多都是后台触发器,你永远不会想到。

SQL> select count(*) from v$process;
另一答案

我的v $ session包含30个条目,其中4个具有用户名(其中一个是后台作业)。

如果您有后台流程(例如批处理作业),他们可能正在咀嚼会话。

但可能是你的内存不足。对于50个会话的连接池,2GB似乎有点低。假设Oracle 10g,你的RAM分为共享(SGA)和进程(PGA)。假设您有15GB的SGA,所有会话都留下500MB。如果会话每次获得10MB,您将达到约50个会话的限制。

实际上,1。你将在盒子上运行其他“东西”,因此甲骨文将无法获得完整的2GB内容

  1. 您的SGA可能更小或更大
  2. 您可能使用11g并让Oracle将PGA和SGA分配到单个池中
  3. 您可能正在使用PGA_AGGREGATE_TARGET(让Oracle根据会话数量猜测PGA设置)或自己设置内存限制。
  4. 你可能有一些内存饥渴的过程会咀嚼东西

PS。 2GB是否意味着您使用的是Windows?

以上是关于Oracle会话和连接池之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 源码分析-会话与线程池之间的关系

是否可以设置同一会话中所有池连接之间共享的最大重试次数?

如何在python多进程代码中使用cx_Oracle创建一个连接(或会话)池来连接Oracle数据库?

像 Atomikos 这样的 JTA 提供者和像 HikariCP 这样的连接池之间有啥关系?

oracle锁表了查出了id但是就是杀不掉,提示用户会话id不存在,求解

Oracle - 使用 Spring 框架的连接池