oracle 11g使用方法,Oracle 11g DRCP配置与使用(下)

上篇中,我们探讨了基本配置DRCP的方法和使用细节。本篇我们继续来探讨配置参数细节和各方面指标内容。

4、配置DRCP关键参数

在dba_cpool_info视图中,我们可以查看到相应的参数信息。

SQL> desc dba_cpool_info;

NameTypeNullable Default Comments

---------------------- ------------- -------- ------- ------------------------------------------------------------

CONNECTION_POOLVARCHAR2(128) YConnection pool name

STATUSVARCHAR2(16)Yconnection pool status

MINSIZENUMBERYMinimum number of connections

MAXSIZENUMBERYMaximum number of connections

INCRSIZENUMBERYIncrement number of connections

SESSION_CACHED_CURSORS NUMBERYSession cached cursors

INACTIVITY_TIMEOUTNUMBERYTimeout for an idle session

MAX_THINK_TIMENUMBERYMax time for client to start activity on an acquired session

MAX_USE_SESSIONNUMBERYMaximum life of a session based on usage

MAX_LIFETIME_SESSIONNUMBERYMaximum life of a session based on time

NUM_CBROKNUMBERY

MAXCONN_CBROKNUMBERY

在DRCP连接池中,最常用的几个参数是minsize、maxsize和inactivity_timeout。

Minsize是说明DRCP连接池初始连接进程数量,如果请求数量超过这个minsize值,就会进行自动拓展。每次进行拓展的进程个数是incrsize参数。

Maxsize表示DRCP最大的拓展进程数量。当已经达到这个数量之后,DRCP连接池就不会获取到连接,被hange住。

DRCP对应的应用需求是“短会话、高并发”的应用场景。所以DRCP服务的连接必然是短时间交互。Inactivity_timeout参数就是设置这个timeout值。如果会话连接到这个连接之后,超过一定时间没有inactive交互,Oracle会自动将其断开。Server Process被释放回连接池。

配置connection pool,我们可以使用dbms_connection_pool方法configure_pool。

SQL> exec dbms_connection_pool.configure_pool(minsize => 1,maxsize =>3,incrsize => 1,inactivity_timeout =>60);

PL/SQL procedure successfully completed

SQL> select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info;

CONNECTION_POOLSTATUSMINSIZEMAXSIZE INACTIVITY_TIMEOUT

------------------------------ ------- --------- ---------- ------------------

SYS_DEFAULT_CONNECTION_POOLINACTIVE1360

--启动连接池;

SQL> exec dbms_connection_pool.start_pool;

PL/SQL procedure successfully completed

--后台进程情况;

[oracle@oracle11g ~]$ ps -ef | grep ora_n

oracle603513 05:22 ?00:00:00 ora_n000_wilson

oracle603959310 05:23 pts/100:00:00 grep ora_n

[oracle@oracle11g ~]$ ps -ef | grep ora_l

oracle568910 05:02 ?00:00:00 ora_lgwr_wilson

oracle603710 05:22 ?00:00:00 ora_l000_wilson

oracle604159310 05:23 pts/100:00:00 grep ora_l

5、maxsize值突破实验

我们实验一下,当突破maxsize值的时候,会出现什么现象。我们启用sqlplus连接。

--第一会话

SQL> conn scott/tiger@wilsondrcp

Connected.

SQL> set time on;

05:23:45 SQL> select sid from v$mystat where rownum<2;

SID

----------

14

--第二会话

SQL> conn scott/tiger@wilsondrcp

Connected.

SQL> set time on

05:24:26 SQL> select sid from v$mystat where rownum<2;

SID

----------

22

启动了两个连接,此时连接池进程情况如下:

[oracle@oracle11g ~]$ ps -ef | grep ora_l

oracle568910 05:03 ?00:00:00 ora_lgwr_wilson

oracle603710 05:22 ?00:00:00 ora_l000_wilson

oracle605210 05:23 ?00:00:00 ora_l001_wilson

oracle605410 05:23 ?00:00:00 ora_l002_wilson

oracle611859310 05:24 pts/100:00:00 grep ora_l

拓展到三个连接进程。但是,此时如果我们进行第三个连接连入,就不允许了。

SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 1 05:25:16 2012

Copyright (c) 1982, 2009, Oracle.All rights reserved.

SQL> conn scott/tiger@wilsondrcp

(数据库连接动作hange住)

这里,我们需要注意一个细节:连接池中存在三个server process,但是为什么第三个连接不能连入。注意:在DRCP连接池中,Oracle是要保留一个连接作为身份权限验证等操作使用的。不能将其分配出去。Maxsize我们设置为3,所以自然没有连接。

第三个连接hange住一段时间后,自动连入。

Connected.

SQL> select sid from v$mystat where rownum<2;

SID

----------

14

第三个会话连入。此时第一个和第二个会话是被强制断开。

--第一会话

05:24:37 SQL> select sid from v$mystat where rownum<2;

select sid from v$mystat where rownum<2

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

Process ID: 6052

Session ID: 14 Serial number: 5

--第二会话

05:24:47 SQL> select sid from v$mystat where rownum<2;

select sid from v$mystat where rownum<2

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

Process ID: 6054

Session ID: 22 Serial number: 17

此时,后台进程状态有释放连接。

[oracle@oracle11g ~]$ ps -ef | grep ora_l

oracle568910 05:03 ?00:00:00 ora_lgwr_wilson

oracle603710 05:22 ?00:00:00 ora_l000_wilson

oracle605210 05:23 ?00:00:00 ora_l001_wilson

oracle620259310 05:28 pts/100:00:00 grep ora_l

附带,dbms_connection_pool的restore_defaults方法,可以将设置值置回。

SQL> exec dbms_connection_pool.stop_pool;

PL/SQL procedure successfully completed

SQL> select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info;

CONNECTION_POOLSTATUSMINSIZEMAXSIZE INACTIVITY_TIMEOUT

------------------------------ ---------------- ---------- ---------- ------------------

SYS_DEFAULT_CONNECTION_POOLINACTIVE1360

SQL> exec dbms_connection_pool.restore_defaults;

PL/SQL procedure successfully completed

SQL> select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info;

CONNECTION_POOLSTATUSMINSIZEMAXSIZE INACTIVITY_TIMEOUT

------------------------------ ---------------- ---------- ---------- ------------------

SYS_DEFAULT_CONNECTION_POOLINACTIVE440300

6、结论

DRCP是Oracle 11g中的新特性。借助DRCP,一些高并发、短会话应用可以获得数据库层面的高效连接池。笔者猜测Shared Server模式就是DRCP的一种早期雏形。在现代企业级应用系统中,连接池是中间件的一个重要组件。当一些应用,如PHP不能提供有效连接池的时候,DRCP也许是不错的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值