Oracle 11g DRCP连接方式——基本原理

  学习Oracle是一个复杂、繁琐的过程。在浩如烟海的Oracle官方资料、新特性、MOS资料和各种Internal知识面前,我们总是觉得力不从心、不知所措。但是,这往往也就是我们不断坚持、积累和追寻的乐趣。
  在Oracle 11g中,提出了突破传统专用/共享连接的第三种连接方式——Database Resident Connection Pooling(DRCP)。本篇我们一起来探讨这项技术。

1、 从Dedicated Server到Shared Server

  Client Process连接到Server Process的方式,传统上有两种方式:Dedicated Server和Shared Server。在Client连入到Oracle Server的过程中,默认是通过监听器listener监听器进行Oracle实例服务定位。只有再由监听器fork出的子进程向Instance请求出一个Server Process与Client Process远程通信。不同的连接方式,就体现在数据库实例在接受到Server Process请求后,是怎么样提供出Server Process进程,以及该进程如何管理的。
Dedicated Server模式也称为专用连接方式,就是Oracle Instance会专门创建出一个新的Server Process与Client Process进行远程通信。在整个Client Process请求过程中,Server Process只为该Client提供服务。UGA信息也保存在Server Process的PGA空间中。当会话结束,Client连接中断,Server Process就失去“存在意义”被清除掉,分配内存回收。Dedicated方式是我们最常使用的数据库连接方式。在长会话或前端应用使用连接池组件的情况下,Dedicated方式的优势是很明显的。
与Dedicated Server模式对应的是Shared Server。在该模式下,Oracle实例会维持两种Server Process:分发进程(Dispatcher DXXX)和共享进程(SXXX)。
 

SQL> select addr, pid, spid, username, program from v$process where program like '%000%';ADDR            PID SPID         USERNAME        PROGRAM-------- ---------- ------------ --------------- --------------------

6D24BA1C         13 648          SYSTEM          ORACLE.EXE (D000)6D24C00C         14 1736         SYSTEM          ORACLE.EXE (S000)

 

 
当监听器向数据库实例提出Server Process分配请求的时候,在Shared Server模式下,监听器会向分发进程DXXX请求分配Server Process。DXXX会根据当前的空闲Server情况,分配出一个Server Process供使用。当Client使用结束之后,Server Process(SXXX)并不是被释放,而是重新回到D000管制下。系统也会依据参数设置,维持一个稳定的SXXX数量。

SQL> show parameter shared_servers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer    shared_servers                       integer     1


Shared Server连接模式的出现,是和短会话、高并发的互联网应用发展相关。每次创建和回收Server Process的成本是很高的。如果应用没有中间层连接池,而是高并发的创建Server Process并且快速回收,这对于数据库来说是很高的压力。
 从现在的应用设计开发看,连接池管理已经渗透入主流应用系统框架,shared server方式实际中应用不是很广泛。

2、Database Resident Connection Pooling(DRCP)
 
如果我们站在软件模式的角度看,Shared Server本质上也是想实现一种在数据库层面上的连接池。这点在Oracle 11g上得到了实现,Oracle驻留连接池(DRCP)就是一个允许在多进程(Multi-Process)和多线程(Multi-Threads)之间共享连接的新特性。
Shared server在一定程度上缓解了Server process IDEL和频繁创建销毁Server process的问题。但是,Shared Server没有解决Session数据共享的问题。当存在client需要长时间持有session,同时其他client没有大量会话要求的时候,这种模型是有效的。但是,在每次请求会话的时间很短(短会话)和数据库活动需要多次会话交互的时候,DRCP就是更加理想的连接池模型了。
DRCP新特性主要针对的就是应用程序在访问数据库时,出现高并发连接数问题。DRCP连接池将Server和Session信息进行缓存,为多个访问的应用程序提供连接共享。
 同Shared Server一样,DRCP前端存在一个代理(Connection Broker),负责应用中间件连接的共享要求,同时负责管理数据库实例上的连接池连接。当应用中间件想Broker提出连接请求的时候,Broker会从连接池中找出空闲连接。当交互结束后,Server Process被释放回连接池供重用。
同shared server不同的方面在于。当共享池中连接池被分配出之后,等价于dedicated server方式。

3、三种连接方式的内存使用情况

三种连接方式下,Oracle实例、Server Process和内存使用方式截然不同。

Dedicated Server方式
 
当Client Server请求连接的时候,全新的Server Process和session信息被创建。当连接中断,Server Process和Session全部被释放。内存分配是一个连接要分配Server Process和Session的空间。UGA信息是保存在PGA里的。
 
Shared Server方式

当接收到Client Server的请求之后,Dispatcher会将请求放置在一个common队列中。可用的Server Process就从队列中获取请求信息。当终止会话之后,对应的会话信息就被释放掉。Session信息是从SGA中分配出。

 DRCP方式

当Client Server请求之后,Connection Broker从连接池中寻找一个空闲Pooled Server提供给Client Server。如果没有空闲的,Connection Broker就会创建出一个新的连接。如果当前连接池已经达到最大数量限制,就将请求放置在等待队列中,等待空闲Server。
当释放Pooled Server回到Connection Pool的时候,相应的数据库资源被释放掉。DRCP的内存要求与存储池大小和会话有关。每个Pooled Server有一个Session信息,且存储在PGA中。
 
下面一个分配实例,来说明情况:
 
场景:一个应用程序,其每个session需要400k的空间。每个Server process对应4M空间。连接池大小为100,共享shared Server大小数据量也是100。如果有5000个连接数。

在Dedicated Server模式下:
Memory Usage=5000*(0.4M+4M)=22GB;

在Shared Server模式下:
 Memory Usage=5000×0.4M+4M×100=2.5GB;注意,其中Session信息的2G是从SGA中分配的。
 
在DRCP模式下:
Memory Usage=100×(4M+0.4M)+5000×35K=615MB。注意:35K为维护会话信息使用的内存大小。
 

4、结论

DRCP模式在传统的shared server基础上,为前端应用提供更加成熟的数据连接池解决方案。从目前的资料看,DRCP对OCI、PHP等多种驱动提供了支持。注意:对JDBC Thin和JDBC OCI的支持还不存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django项目开发1:搭建虚拟环境

需求 不同项目依赖不同模块版本,不能共用一套环境,虚拟环境。在系统的python环境安装 安装 pip3 install virtualenv pip3 install virtualenvwrapper-win环境变量 # 配置环境变量: # 控制面板 > 系统和安全 > 系统 > 高级系统设…

IPC之——消息队列

消息队列作用&#xff1a; 可以用于两个没有联系的进程间通信&#xff0c;创建一个消息队列类似于打开了一个文件&#xff0c;两个不同的进程都可以进行操作 消息队列之函数介绍&#xff1a; 头文件&#xff1a;<sys/type.h> <sys/ipc.h> <sys/msg.h> 1.msgg…

【招聘(上海)】To B数字化营销公司-市场易,直招.NET后端研发工程师

【招聘背景】公司&#xff1a;上海光潾网络科技有限公司成立于2016年&#xff0c;系上海市高新技术企业&#xff0c;2021年获数千万A轮融资项目&#xff1a;公司自主研发营销自动化SaaS平台- 市场易 (Custouch) &#xff0c;通过数字手段为B2B营销赋能&#xff0c;现服务100多家…

div 包裹_如何查看到达之前收到的包裹和邮件

div 包裹The United States Postal Service, UPS, and FedEx all offer online dashboards where you can see exactly what packages (and letters, in the case of the US Postal Service) are scheduled to arrive at your address. They’ll even email and send you text …

py文件的运行

安装过程及配置 安装过程准备&#xff1a; 下载好Python的安装程序后&#xff0c;开始安装&#xff0c;在进入安装界面后一定确保勾选将Python加入到系统环境变量的路径里。如图所示&#xff1a; 2如果没有选取&#xff0c;那么按照下面的步骤进行操作。在桌面上用鼠标右键点击…

加州大学信息科学院长:数据科学课程不只是工程师才修的

一般在考虑围绕数据科学的基础教育时&#xff0c;传统上的重点仍停留在计算和工程等硬性技能上。不过&#xff0c;在周四于纽约市召开的GigaOm结构数据&#xff08;Structure Data&#xff09;会议上&#xff0c;美国加州大学伯克利分校信息科学院长AnnaLee Saxenian教授表示&a…

查看安装软件/Select-object/Where-Object xxx -like

查看已安装软件 1.通过注册列表查看 $Path(HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\WOW6432…

网络编程基础(一)

一.楔子 你现在已经学会了写python代码&#xff0c;假如你写了两个python文件a.py和b.py&#xff0c;分别去运行&#xff0c;你就会发现&#xff0c;这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据&#xff0c;你要怎么做呢&#xff1f; 这个问题以…

dotnet-exec 让 C# 程序更简单

dotnet-exec 让 C# 程序更简单Introdotnet-exec是一个可以执行 C# 程序而不需要项目文件的命令行工具&#xff0c;并且你可以指定自定义的入口方法不仅仅是Main方法在 python/NodeJs 里&#xff0c;可以使用python xx.py/node xx.js来运行代码&#xff0c;在 C# 中一般是需要项…

office数据集dslr_如何将照片从DSLR无线传输到智能手机

office数据集dslrYou’ve got a great digital camera. You’ve got all your social media apps on your phone. Wouldn’t it be nice if you could snap a beautiful shot with your DSLR and shuttle it right over to your phone to throw up on Facebook or Instagram? …

文件管理、命令别名和glob

一、复制命令:cp src dest1.如果scr是文件a.如果dest不存在&#xff0c;则新建dest并将src的内容填充到dest里b.如果dest存在&#xff0c;则会用src里的内容覆盖dest里的内容&#xff0c;即覆盖dest2.如果src是目录a.如果dest不存在&#xff0c;则新建dest,然后把src下的内容复…

大数据汇聚全球精英

投资10亿美元&#xff0c;选址贵安新区&#xff0c;建设iCloud服务的中国主数据中心。7月12日苹果公司的这一举动再次将全球目光聚集在贵州。 “贵州有令人瞩目的增长&#xff0c;是中国新数据中心领域最具发展潜力的地点之一。”苹果公司环境、政策和社会事务副总裁丽萨杰克逊…

django版本区别/与版本匹配

一、区别 路由层 1.django 1.x路由层使用url方法 django 2.x和3.x版本使用path方法 url() 第一个参数支持正则 path()第一个参数是不支持正则的 可以使用 re_path替代url() from django.urls import re_path # django2.0中的re_path #不建议导入url,不能区分版本 #from djang…

复制

ab,像这样的复制&#xff0c;本质上a与b引用的是同一对象&#xff0c;当a改变时相应的b也会做出同样的改变&#xff1b; 对于列表和字典这样的容器对象分为&#xff1a;浅层复制blist(a)和深层复制bcopy.deepcopy(a) 浅层复制对对象共有的元素进行改变时同时改变&#xff1b; 深…

天坑,这样一个lambda随机取数据也有Bug

前几天&#xff0c;一位网友跟我说他编写的一段很简单的代码遇到了奇怪的Bug&#xff0c;他要达到的效果是从一个List中随机取出来一条数据&#xff0c;代码如下&#xff1a;var random new Random(); var users Enumerable.Range(0, 10).Select(p > new User(p, "A&…

中兴面试一个星期没有回音_如何在没有回声的情况下从亚马逊获取即时时尚建议...

中兴面试一个星期没有回音The Echo Look is a new device from Amazon that’s able to take a look at your outfits and tell you which one looks the best on you. However, you actually don’t need the Echo Look to get this kind of instant fashion advice from Amaz…

table分页的简单实现逻辑

为什么80%的码农都做不了架构师&#xff1f;>>> //table分页函数showPageNum: function(pageNum, allPageNum) { //pageNum点击第几页&#xff0c;allPageNum总页数$(".c_page .c_page_list").children().remove();for(var i1;i<allPageNum;i){var p…

django22:复制网页与css/时区设置

复制网页 1.复制文章 右击——检测——选中——复制——copy outerhtml (整体html) 2.复制点赞点踩 a.复制html b.css也要复制 如果是模板&#xff0c;在html head内 {% block css %}{% endblock %} 网页 {% block css %}<style>#div_digg {float: right;margin-…

Cocos Creator Ui系统

为什么80%的码农都做不了架构师&#xff1f;>>> 游戏场景&#xff1a;开发时组织游戏内容的中心&#xff1b;其中渲染根节点Canvas&#xff0c;包括属性 Design Resolution&#xff08;设计分辨率&#xff09; fit width,fit height 设计分辨率是内容生产者在制作场…

关于spring boot多张表建立外健的讨论

现在有四张表&#xff1a;student(学生表)、blogs(博客表)、comment(评论表)、reply(回复表) 现在说一下这四张表&#xff1a; student(学生表)&#xff1a;学生的信息记录表 blogs(博客表)&#xff1a;学生发表的博客表 comment(评论表)&#xff1a;学生评论博客文章的表 repl…