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

Oracle客户端Dedicated和Shared连接模式

Dedicated(专用模式)用户进程和服务器进程是分开的。每个用户进程都有自己的服务器进程。用户进程和服务器进程可在不同的机器上

Dedicated(专用模式)用户进程和服务器进程是分开的。每个用户进程都有自己的服务器进程。用户进程和服务器进程可在不同的机器上

Dedicated(专用模式)
用户进程和服务器进程是分开的。
每个用户进程都有自己的服务器进程。
用户进程和服务器进程可在不同的机器上运行,以利用分布式处理的优势。
用户进程和服务器进程的比率是1 比1。
即使用户进程不发出数据库请求,专用服务器也存在,只是保持空闲状态。
此处所用的程序接口取决于用户进程和专用服务器进程是否在同一台机器上。如果在同一
机器上,进程间的程序接口将使用主机操作系统的交互进程通信(IPC) 机制。
下图展示了Oracle专用服务模式下的客户进程连接状态:

Oracle客户端Dedicated和Shared连接模式

Oracle客户端Dedicated和Shared连接模式



Shared(共享模式)
减少针对某一例程的进程数目
增加可服务的用户数
实现负载平衡
减少空闲服务器进程的数目
减少内存占用和系统开

Oracle客户端Dedicated和Shared连接模式

Oracle客户端Dedicated和Shared连接模式

默认情况下数据库创建的连接模式为专享模式,但即使修改成共享连接模式以下几种情况也必定是以专享模式连接的:
当批量提交的job时(对于服务进程,一个job几乎没有空闲时间)。

使用RMAN进行备份,恢复或修复数据库时。


除了Dedicated和Shared,Oracle还提供了常驻连接池模式(Database Resident Connection Pooling)。这种模式主要用于web应用的请求
通过一个简单的例子来对比三种连接模式下对内存的需求:
考虑一个应用每一个会话请求的内存大小为400K,而每一个服务进程需要使用4M的内存,当pool size为100并且共享模式最大连接数为100。

专享模式下
Memory used = 5000 X (400 KB + 4 MB) = 22 GB
共享模式下
Memory used = 5000 X 400 KB + 100 X 4 MB = 2.5 GB
超出2.5G,2G来自于SGA区
常驻连接池
Memory used = 100 X (400 KB + 4 MB) + (5000 X 35KB)= 615 MB
这里每一个代理进程的消耗内存接近35k

配置共享模式
共享模式下涉及到的参数有:
SHARED_SERVERS 指定共享服务进程启动时的最小数值。
MAX_SHARED_SERVERS 指定可同时运行的共享服务进程的最大值。
SHARED_SERVERS_SESSIONS 指定可同时连接共享进程的用户会话总数。
DISPATCHERS 为共享模式配置调度进程
MAX_DISPATCHERS 指定允许同时运行的调度进程的最大数,该参数现在可能被忽略了。
CIRCUITS 指定网络会话流入流出可用的总的虚拟环路。

因为要开启共享模式,SHARED_SERVERS设置的值必须大于0,而其他相关配置可以不需要,当SHARED_SERVERS值大于0时,调度进程也会启动,即使没有配置dispatchers参数

在DBCA创建数据库的过程中,Oracle会自动创建一个用于XML DB(XDB)的调度进程。该配置仅允许会话以共享模式连接数据库,但要进行一些常规的操作(如提交SQL语句),用户必须额外的配置调度或替换XDB调度配置

alter system set shared_servers=5;

关于MAX_SHARED_SERVERS没有默认值,,如果该值为空,PMON进程会根据请求开启足够多的共享服务进程。但也要受到以下参数的限制:
process 的限制

空闲process槽的最小值(至少1/8的总进程槽数,或为2当process设置的值小于24时)

系统资源

SHARED_SERVERS_SESSIONS用于限制并发共享服务的用户会话最大数,该参数是动态变化的,其中还保留了用于专享服务的数据库会话。这确保管理任务如备份,还原和恢复数据库时不会占用共享服务的会话。

CIRCUITS 都没有默认值,该值取决于调度参数的值和系统资源。因此尽量对其作出限制。
alter system set circuits=;

关于DISPATCHERS的设置:
限定地址协议和最小启用调度进程数
dispatchers='(address=(pro=tcp) (host=10.x.x.x) (dispatchers=2))'
dispatchers='(description=(address=(pro=tcp) (host=10.x.x.x) (dispatchers=2)))'
限制dispatchers的最大网络连接和会话数
dispatchers='(pro=tcp) (dispatchers=2) (cOnn=100) (sess=100)'
为dispatchers指定别名和服务名,用于PMON进程注册调度信息。
dispatchers='(pro=tcp) (dispatchers=2) (list=orcl) (serv=orcl)'
允许多路复用和连接池
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)'

dispatchers可以多在配置文件中写多行,但是必须放在一起。或者以逗号分隔放在同一行配置中。
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)','(pro=tcps) (dispatchers=2)'
or
dispatchers='(pro=tcp) (dispatchers=2) (multi=on) (poo=on)'
dispatchers='(pro=tcps) (dispatchers=2)'

如何决定调度进程的多少:
dispatchers=ceil(max_concurrent_sessions / connections for each dispatcher)
connections for each dispatcher由系统决定,一个系统允许单个进程的最大连接数即为connections for each dispatcher的取值。

配置TNSNAME.ORA文件,将客户端连接的SERVER方式修改成SHARED模式。

配置好上述参数后,就可以通过共享方式连接数据库了。连接时需要指明实例名
通过lsnrctl services命令观察实例的注册信息
sqlplus user/password@sid

可以通过下列视图来验证和观察性能:
select name, paddr, network, status, accept, messages, listener, conf_indx from v$dispatcher;
select maximum_connections,maximum_sessions,servers_started from v$shared_server_monitor;
select circuit,dispatcher,server,waiter,saddr,status,queue,messsages,bytes from v$circuit;
v$dispatcher_config
v$shared_server
v$queue
v$shared_pool_reserved
v$dispatcher_rate
v$sga
v$sgastat

修改dispatchers参数可以通过以下方式:
alter system set dispatchers=‘(index=0) (pro=tcp) (dispatchers=2) (multi=on) (poo=on)','(index=1) (pro=tcps) (dispatchers=2)';
这里的index后的值表示调度进程的序列,可以在v$dispatcher_config中获得

关闭特定的dispatchers进程
alter system shutdown immediate ‘name of dispatchers’
这个dispatchers的名称来自于v$dispatcher表的name字段。

本文永久更新链接地址

推荐阅读
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • MyBatis入门指南:环境搭建与基础配置详解
    本文详细介绍了MyBatis的基础配置流程,包括在Maven项目中添加MyBatis依赖、IDEA中配置数据库连接、导入SQL脚本以及编写mybatis-config.xml配置文件等关键步骤。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
author-avatar
dghghjkk_952
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有