Oracle 自带连接池 DRCP

介绍了Oracle11g推出的DRCP连接池机制,它适用于高并发、短会话的应用场景,通过缓存Server和Session信息实现连接共享。文章还详细解释了DRCP与DedicatedServer和SharedServer模式的区别,并提供了配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle 11g在专用模式(Dedicated Server)和共享模式(Shared Server)两种连接方式基础上,推出了第三种连接方式:DRCP(Database Resident Connection Pool)数据库驻留连接池,提供了数据库层面上的连接池管理机制,从数据库自身来应对高并发、短会话的前端应用。

Dedicated Server模式是一个Server Process对应一个Client Process;

Shared Server模式是一个Server Process对应多个Client Process,Oracle实例会维持两种Server Process:分发进程(Dispatcher DXXX)和共享进程(SXXX)。
Shared server模式在一定程度上缓解了Server process IDEL和频繁创建销毁Server process的问题。当存在client需要长时间持有session,同时其他client没有大量会话要求的时候,这种模型是有效的。但是Shared Server没有解决Session数据共享的问题,在每次请求会话的时间很短(短会话)和数据库活动需要多次会话交互的时候,DRCP则是更加理想的连接池模型了。

DRCP主要针对的就是应用程序在访问数据库时,出现高并发连接数问题场景,DRCP连接池将Server和Session信息进行缓存,为多个访问的应用程序提供连接共享。
同Shared Server一样,DRCP前端存在一个代理(Connection Broker),负责应用中间件连接的共享要求,同时负责管理数据库实例上的连接池连接。当应用中间件向Broker提出连接请求的时候,Broker会从连接池中找出空闲连接。当交互结束后,Server Process被释放回连接池供重用。同shared server不同的方面在于。当共享池中连接池被分配出之后,等价于dedicated server方式。
因此可以说:DRCP模式在传统的shared server基础上,为前端应用提供更加成熟的数据连接池解决方案。

配置:
DRCP配置分为两个步骤:Database Level Configuration 和 Application Level Configuration。
1、Database Level Configuration
a、配置动态监听
由于DRCP连接需要将Broker进程注册到监听中,用于处理客户端连接接入时,让监听选择空闲的连接池供客户端使用,而静态监听没有调度进程信息,因此需要将监听配置为动态注册,否则连接时将会报错ORA-12523的错误。

b、启动DRCP服务:
使用dbms_connection_pool包对其进行管理,比如就用默认的连接池:
默认连接池是不启用的,要启用,通过start_pool启用: exec dbms_connection_pool.start_pool();

启用后,后台进程就会出现Broker进程和连接池设置的n个连接。这样数据库端就配置好了。

2、Application Level Configuration
修改tns配置中的:SERVER = DEDICATED 修改为SERVER = POOLED ,而后通过tns连接即可用上连接池。

修改连接池配置:
使用dbms_connection_pool.CONFIGURE_POOL 进行设置:
Minsize :DRCP连接池初始连接进程个数,如果请求数量超过minsize值,就会进行自动拓展。每次进行拓展的进程个数是incrsize参数。
Maxsize :DRCP最大可拓展进程个数,当扩展达到这个个数后,DRCP连接池就不会获取到连接,新连接被hange住,等待被占用连接池的释放。
Inactivity_timeout :设置空闲超时时间,默认300秒。DRCP对应的应用需求是“短会话、高并发”的应用场景,如果会话占用一个连接池后,超过Inactivity_timeout时间没有交互,Oracle会自动将其断开,Server Process被释放回连接池供新的连接使用。

比如将默认的SYS_DEFAULT_CONNECTION_POOL连接池,最小修改为20,最大修改为30,每次增加1个,超时时间设置为60s,如下:
begin
dbms_connection_pool.CONFIGURE_POOL(minsize=>20,maxsize=>30,incrsize=>1,inactivity_timeout=>60);
end;
/

SQL> select CONNECTION_POOL,STATUS,MINSIZE,MAXSIZE,INCRSIZE,INACTIVITY_TIMEOUT from dba_cpool_info;

CONNECTION_POOL STATUS MINSIZE MAXSIZE INCRSIZE INACTIVITY_TIMEOUT


SYS_DEFAULT_CONNECTION_POOL ACTIVE 20 30 1 60

SQL>
修改配置立即生效,无需重启。

如果想修改回默认值:
exec dbms_connection_pool.RESTORE_DEFAULTS();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值