热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11gDRCP连接方式基本原理

学习Oracle是一个复杂、繁琐的过程。在浩如烟海的Oracle官方资料、新特性、MOS资料和各种Internal知识面前,我们总是觉得力不从心

学习Oracle是一个复杂、繁琐的过程。在浩如烟海的Oracle官方资料、新特性、MOS资料和各种Internal知识面前,我们总是觉得力不从心

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

linux

推荐阅读
  • 本文详细探讨了不同SQL数据库管理系统(DBMS)在限制输出结果、拼接字段和日期时间处理方面的函数差异。通过具体示例,帮助读者理解并掌握如何在不同DBMS中实现相同功能。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
author-avatar
hk129
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有