11.2.0.4单实例DRCP(Database Resident Connection Pooling)简单测试
DRCP配置及测试
一. DRCP介绍
数据库提供会话进程在数据库中使用资源的方式:
1)Dedicated Server,一个会话在数据库中对应一个专有进程,一对一服务(资源数据库占用过多,一般使用中间件应用层面进行会话数量管控及会话资源重用)
当接收到Client Server的请求之后,Dispatcher会将请求放置在一个common队列中。可用的Server Process就从队列中获取请求信息。当终止会话之后,对应的会话信息就被释放掉。Session信息是从SGA中分配出。
2)Shared Server,数据库中配置连接池,会话循环使用这些连接池的资源(bug 太多几乎无人使用)
当Client Server请求之后,Connection Broker从连接池中寻找一个空闲Pooled Server提供给Client Server。如果没有空闲的,Connection Broker就会创建出一个新的连接。如果当前连接池已经达到最大数量限制,就将请求放置在等待队列中,等待空闲Server。
创建回收分配资源,消耗大
3)Database Resident Connection Pooling
Shared server在一定程度上缓解了Server process IDEL和频繁创建销毁Server process的问题。但是,Shared Server没有解决Session数据共享的问题。当存在client需要长时间持有session,同时其他client没有大量会话要求的时候,这种模型是有效的。但是,在每次请求会话的时间很短(短会话)和数据库活动需要多次会话交互的时候,DRCP就是更加理想的连接池模型了。
DRCP新特性主要针对的就是应用程序在访问数据库时,出现高并发连接数问题。DRCP连接池将Server和Session信息进行缓存,为多个访问的应用程序提供连接共享。
当Client Server请求之后,Connection Broker从连接池中寻找一个空闲Pooled Server提供给Client Server。如果没有空闲的,Connection Broker就会创建出一个新的连接。如果当前连接池已经达到最大数量限制,就将请求放置在等待队列中,等待空闲Server。
当释放Pooled Server回到Connection Pool的时候,相应的数据库资源被释放掉。DRCP的内存要求与存储池大小和会话有关。每个Pooled Server有一个Session信息,且存储在PGA中。
从功能上说,Shared Server 几乎早已无人使用,对于会话的资源重用,限制由中间键承担,及时DRCP优化了Shared server,本质上说还是没有中间件控制更成熟,应用更广泛。
二. DRCP配置使用
1. 版本
测试环境11.2.0.4 linux5.6 单实例环境
SQL> select * from v$version where banner like '%Database%';
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2. 连接池状态
查询数据库连接池状态,inactive未启用
SQL> select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info;
CONNECTION_POOL STATUS MINSIZE MAXSIZE INACTIVITY_TIMEOUT
------------------------------------------------------ ------------------------
SYS_DEFAULT_CONNECTION_POOL INACTIVE 4 40 300
开启后,连接池中最少存在4个连接
默认最大的连接池支持40个连接
非活跃会话将在300秒后资源被回收
3. 启用DRCP
调用存储过程,启用DRCP
SQL> exec dbms_connection_pool.start_pool();
PL/SQL procedure successfully completed.
查询数据库连接池状态,已启用
SQL> select CONNECTION_POOL,STATUS,MINSIZE,MAXSIZE from dba_cpool_info;
CONNECTION_POOL STATUS MINSIZE MAXSIZE
---------------------------------------- ---------------- ---------- ----------
SYS_DEFAULT_CONNECTION_POOL ACTIVE 4 40
4. 管理服务进程
查询共享池连接管理进程
[root@t2 ~]# ps -ef|grep ora_n |grep -v grep
oracle 2967 1 0 20:35 ? 00:00:00 ora_n000_t2
ora_n000_sid 就是Connection Broker进程,负责连接管理。
查询连接池中server process进程,数量由minsize决定
[root@t2 ~]# ps -ef|grep ora_l |grep -v grep
oracle 2971 1 0 20:35 ? 00:00:00 ora_l000_t2
oracle 2975 1 0 20:35 ? 00:00:00 ora_l001_t2
oracle 2979 1 0 20:35 ? 00:00:00 ora_l002_t2
oracle 2983 1 0 20:35 ? 00:00:00 ora_l003_t2
oracle 29981 1 0 02:56 ? 00:00:06 ora_lgwr_t2
5. 编辑tnsnames.ora,客户端配置
#默认专有服务器连接模式
T2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = t2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = t2)
)
)
#使用连接池模式
Test =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = t2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = POOLED)
(SERVICE_NAME = t2)
)
)
6. 会话进程
测试远程连接
[oracle@t2 admin]$ sqlplus sys/oracle@t2 as sysdba
#专有模式进程,远程连接
[root@t2 ~]# ps -ef|grep LOCAL|grep -v grep
oracle 3081 1 0 20:39 ? 00:00:00 oraclet2 (LOCAL=NO)
#连接池连接
[oracle@t2 admin]$ sqlplus sys/oracle@test as sysdba
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid =(select distinct sid from v$mystat));
PID SPID
---------- ------------------------
36 2979
[root@t2 ~]# ps -ef|grep 2979|grep -v grep
oracle 2979 1 0 20:35 ? 00:00:00 ora_l002_t2
[oracle@t2 ~]$ sqlplus scott/tiger@test
SQL> select pid,spid from v$process where addr=(select paddr from v$session where sid =(select distinct sid from v$mystat));
PID SPID
---------- ------------------------
34 2975
[root@t2 ~]# ps -ef|grep 2975|grep -v grep
oracle 2975 1 0 20:35 ? 00:00:00 ora_l001_t2
7. 关闭连接池
关闭资源池—已连接会话不结束,无法关闭。主动关闭会话或者等待连接池机制会话inactive达到断开机制才关闭
SQL> exec dbms_connection_pool.stop_pool;
Tue Dec 25 20:07:51 2018
Closing scheduler window
Closing Resource Manager plan via scheduler window
Clearing Resource Manager plan via parameter
关闭后,进程消失
[root@t2 ~]# ps -ef|grep ora_l|grep -v grep|grep -v lgwr
8. 调整连接池
修改为初始1个连接,最大3个连接,默认60s断开,测试连接达到最大值如何报错
SQL> exec dbms_connection_pool.configure_pool(minsize => 1,maxsize =>3 ,inactivity_timeout =>60);
select connection_pool, status, minsize, maxsize, INACTIVITY_TIMEOUT from dba_cpool_info
CONNECTION_POOL STATUS MINSIZE MAXSIZE INACTIVITY_TIMEOUT
----------------------------------- ---------------- ---------- ---------- ------------------
SYS_DEFAULT_CONNECTION_POOL INACTIVE 1 3 60
测试第三个会话连接,hang住
[oracle@t2 ~]$ sqlplus scott/tiger@test
--等待60s,存在会话被强制断开后,空闲新的连接,添加进入
SQL> select * from cat;
select * from cat
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 3442
Session ID: 65 Serial number: 67
使用连接池方式登录数据库,连接池未开启报错
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server
三. 管理思路
1.尝试杀会话,对数据库是否存在影响
ps -ef|grep ora_l|grep -v grep|grep -v lgwr
oracle 3427 1 0 21:04 ? 00:00:00 ora_l000_t2
oracle 3446 1 0 21:04 ? 00:00:00 ora_l002_t2
[root@t2 ~]# kill -9 3427
[root@t2 ~]# kill -9 3446
暂时无异常
新的会话连接,不受影响
2尝试杀连接池代理进程,什么影响
[root@t2 ~]# ps -ef|grep ora_n |grep -v grep
oracle 3423 1 0 21:04 ? 00:00:00 ora_n000_t2
杀死代理进程,所有新的会话无法连接,已成功连接会话不受影响
[oracle@t2 admin]$ sqlplus sys/oracle@test as sysdba
ERROR:
ORA-12537: TNS:connection closed
Enter user-name:
间隔1分钟内,进程自启动(具体时间未测试)
[root@t2 ~]# ps -ef|grep ora_n |grep -v grep
oracle 3564 1 0 21:11 ? 00:00:00 ora_n000_t2
新的会话能正常连接
[oracle@t2 admin]$ sqlplus sys/oracle@test as sysdba
SQL>
[root@t2 ~]# ps -ef|grep ora_l |grep -v grep|grep -v lgwr
oracle 3544 1 0 21:10 ? 00:00:00 ora_l000_t2
oracle 3584 1 0 21:12 ? 00:00:00 ora_l001_t2
小结:对于数据库来说,开启drcp,不会影响专用进程的连接,只是多出一种新的连接方式;
由于使用少,且不熟悉该技术,因此不建议使用。最成熟的方式,数据库使用专用服务器连接模式,中间件去管理连接池,而不是使用数据库内部自带的连接池(DRCP);
当然,如果强行使用,通过服务器端测试,杀死会话或者连接池分配进程,存在健壮性,不会影响整个库,但是需要做好应用报错连接的准备,通过mos提前进行相关预防。
四. 总结
不建议使用
从功能上说,DRCP本质是节约数据库资源的保护措施,与中间件功能重叠,且中间件应用管理更安全
11.2.0.4单实例DRCP(Database Resident Connection Pooling)简单测试的更多相关文章
- Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考
写在前面: 1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补丁中附带的readme. 2.Oracle每季度都会更新一个最新的PSU,本文最新指的是当前最新 ...
- Oracle 11.2.0.4单实例打补丁
Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考 写在前面: · 1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补 ...
- Asianux 7.3安装Oracle 11.2.0.4单实例体验
环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的最小安装部署,Oracle安装额外需要的包统一使用yum安装. 查看当前系统相关信息: [root@ ...
- oracle database resident connection pooling(驻留连接池)
oracle在11g中引入了database resident connection pooling(DRCP).在此之前,我们可以使用dedicated 或者share 方式来链接数据库,dedic ...
- 完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程
本文记录了打PSU的全过程,意在体会数据库打PSU补丁的整个过程. 1.OPatch替换为最新版本2.数据库软件应用19121551补丁程序3.数据库应用补丁4.验证PSU补丁是否应用成功 1.OPa ...
- oracle 11.2.0.4单实例文件系统安装与补丁
[TOC] 一,预安装处理 1.版本准备 操作系统:RHEL 6.5 数据库版本:Oracle 11.2.0.4 相关包:p13390677_112040_Linux-x86-64_1of7.zip ...
- 11.2.0.1单实例DGduplicate过程
记录一次duplicate完整过程1)环境说明数据库版本oracle11.2.0.1,os linux 6.6备库应用的归档,最近一次是三个月前,由于DG环境以前是好的,因此直接迁移数据即可.本次使用 ...
- Linux平台Oracle 12.1.0.2 单实例安装部署
主题:Linux平台Oracle 12.1.0.2 单实例安装部署 环境:RHEL 6.5 + Oracle 12.1.0.2 需求:安装部署OEM 13.2需要Oracle 12.1.0.2版本作为 ...
- redis5.0.3单实例简单安装记录
redis5.0.3单实例简单安装记录 日常需要测试使用,索性记录下来,免得临时又麻烦的找资料. yum -y install make gcc-c++ cmake bison-devel ncurs ...
随机推荐
- nodejs--路径问题
在读写模块中,需要引入读写文件,此时需要注意路径问题.Node.js中为我们提供了两个参数:__dirname和__filename. __dirname:全局变量,存储的是文件所在的文件目录 __f ...
- 使用JQuery 合并两个 json 对象
一,保存object1和2合并后产生新对象,若2中有与1相同的key,默认2将会覆盖1的值 var object = $.extend({}, object1, object2); 二,将2的值合并到 ...
- Linux+Apache+MySQL+PHP配置教程
有时我们只想搭建LAMP环境做个测试,并不在意目录的和配置是否规范,本教程正是为此想法而写能简单的就不复杂实现最快地搭建LAMP:操作系统为CentOS6.5. 1.安装Apache yum inst ...
- springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式
最近在做项目中发现,前台提交数据时,如果通过form表单提交和ajax发送json时,springMVC后台接收不能都通过@ModelAttribute方式处理,经过一番查找后,ajax发送json请 ...
- nyoj 1091 还是01背包(超大数dp)
nyoj 1091 还是01背包 描述 有n个重量和价值分别为 wi 和 vi 的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值 1 <= n <=40 1 ...
- Win10系列:VC++ Direct3D图形绘制1
通过前面的介绍,相信读者已经了解了如何新建一个用于开发Direct3D应用程序的项目模版,以及这个项目模版中用于绘制立体图形的主要函数.在本小节中,将通过一个具体的示例来介绍如何使用Visual St ...
- sql取大的一个值
select b.*, a.recid, a.keyno from product b, (select pcode, ...
- day2-python工具的选择使用
Python 编辑工具的选择 在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍. 所以,实际开发的时候,我们总是使用一个编辑器来写代码,写完 ...
- Windows系统上设置 Git Bash 的 Font 及 Locale
在windows 上使用 Git Bash 可以获得 unix 命令 操作体验. 但是初始的Git Bash的字体及语系都很不方便,需要自己设置. 在Git Bash的命令窗体上边框点击鼠标右键可以进 ...
- Zabbix4.0监控URL
一:新建群组 1.1:web monitor 二:新建模板 2.1:配置-模板-模板 2.3:创建应用集 配置-模板-web monitor-应用集 2.4:创建web场景 2.5:创建场景步骤: 以 ...