数据库驻留连接池(DRCP)在数据库服务器中为典型的Web应用程序使用场景提供连接池,其中应用程序获取数据库连接,在相对较短的时间内对其进行处理,然后释放它。 DRCP池“专用”服务器。共用服务器相当于服务器前台进程和数据库会话的组合。
DRCP补充了共享中间层进程中线程间连接的中间层连接池。另外,DRCP还支持在同一个中间层主机上甚至跨中间层主机的中间层进程间共享数据库连接。这将显着减少支持大量客户端连接所需的关键数据库资源,从而减少数据库层内存占用量并提高中间层和数据库层的可伸缩性。拥有一批随时可用的服务器还具有降低创建和拆除客户端连接成本的额外好处。
DRCP与具有不能执行中间层连接池的多进程单线程应用程序服务器(如PHP / Apache)的体系结构尤其相关。数据库仍然可以扩展到数以万计的DRCP同时连接。
在Windows平台上,DRCP不支持将SQLNET.AUTHENTICATION_SERVICES参数值设置为nts
“获取有关获取DRCP会话时可用选项的信息
何时使用数据库驻留连接池
当多个客户端访问数据库时以及以下任何情况适用时,数据库驻留连接池非常有用:
- 大量的客户端连接需要以最小的内存使用量来支持。
- 客户端应用程序相似,可以共享或重用会话。如果应用程序与相同的数据库凭证连接并使用相同的模式,则它们是相似的。
- 客户端应用程序获取数据库连接,在相对较短的时间内处理它,然后释放它。
- 跨客户端请求不需要会话亲缘关系
- 客户端有多个进程和多个主机。
数据库驻留连接池的优点
使用数据库驻留连接池提供了以下优点:
- 在多个中间层客户端应用程序之间启用资源共享。
- 通过减少资源使用来提高数据库和应用程序的可伸缩性。
数据库驻留连接池和LOGON / LOGOFF触发器
每次在DRCP中创建新会话时,LOGON都会触发每次验证。
LOGOFF会触发每次注销并在DRCP中销毁会话时触发。因此,当会话由于空闲时间限制而终止时,会触发LOGOFF触发器
比较DRCP到专用服务器和共享服务器
表5-1列出了专用服务器,共享服务器和数据库常驻连接池之间的差异。
Table 5-1 Dedicated Servers, Shared Servers, and Database Resident Connection Pooling
Dedicated Server | Shared Server | Database Resident Connection Pooling |
收到客户端请求时,会为客户端创建新的服务器进程和会话。 | 当从客户端接收到第一个请求时,分派器进程将该请求放在一个公共队列中。该请求由可用的共享服务器进程拾取。分派器进程然后管理客户端和共享服务器进程之间的通信。 | 当从客户端接收到第一个请求时,连接代理选择一个可用的池化服务器,并将客户端连接切换到池化服务器。 如果没有池服务器可用,则连接代理创建一个。如果池已达到其最大大小,则将客户端请求置于等待队列中,直到池池服务器可用。 |
释放数据库资源涉及终止会话和服务器进程。 | 释放数据库资源涉及终止会话。 | 释放数据库资源涉及将共用服务器释放到池中。 |
内存需求与服务器进程和会话的数量成正比。每个客户端都有一个服务器和一个会话。 | 内存要求与共享服务器和会话的总和成比例。每个客户端都有一个会话。 | 内存需求与合并服务器及其会话的数量成正比。每个池化服务器都有一个会话。 |
会话内存是从PGA分配的。 | 会话内存是从SGA分配的 | 会话内存是从PGA分配的。 |
专用服务器,共享服务器和数据库驻留连接池的内存使用示例
考虑一个应用程序,其中每个会话所需的内存为400 KB,每个服务器进程所需的内存为4 MB。池大小为100,共享服务器数量为100。
如果有5000个客户端连接,则每个配置使用的内存如下所示:
- 专用服务器Memory used = 5000 X (400 KB + 4 MB) = 22 GB
- 共享服务器Memory used = 5000 X 400 KB + 100 X 4 MB = 2.5 GBOut of the 2.5 GB, 2 GB is allocated from the SGA.
- 数据库驻留连接池Memory used = 100 X (400 KB + 4 MB) + (5000 X 35KB)= 615 MBThe cost of each connection to the broker is approximately 35 KB.
使用数据库驻留连接池的限制
与池服务器连接时,您不能执行以下活动:
- 关闭数据库
- 停止数据库驻留连接池
- 更改连接用户的密码
- 使用共享数据库链接连接到数据库常驻连接池
- 使用高级安全选项(ASO)选项,如加密,证书等
- 直接使用OCI_MIGRATE选项或间接通过OCIConnectionPool在服务器端使用可迁移会话
与池中的数据库用户相关的DDL语句需要谨慎执行,因为池中的预先DDL会话仍然可以在DDL之后提供给客户端。例如,在删除用户时,请确保池中没有该用户的会话,并且没有与以该用户身份进行身份验证的代理的连接
启用显式角色的会话将释放到池中,稍后可以发送给需要默认登录角色的(同一用户的)连接。避免使用显式角色发布会话,而是终止它们
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc.htm#ADMIN12347