Oracle共享服务器的使用和配置
目的
完成本课后,应该可以实现下面事情:
了解Oracle共享服务器的组成
描述Oracle共享服务器的架构
配置Oracle共享服务器
了解和解释相关数据视图的使用
共享的服务器进程作为Oracle共享服务器架构的一部分
独占服务器进程的特点:
用户进程和服务器进程是分离的
每个用户进程拥有自己的服务器进程
用户和服务器进程能够允许在不同的机器上,可以利用到分布式处理
用户进程和服务器进程是一对一的关系
即使用户进程没有发出数据库请求,独占式服务器也会存在不过保持空闲
如果用户和服务器进程位于一台主机上,那么相互之间通过IPC机制通信
Oracle共享服务器可以在一个实例中启用共享服务器、独占服务器或者两者共存的服务器
为什么要使用共享服务器?
比如说在一个在线的事物处理环境中,订单处理的应用,用户通过一个应用界面输入数据,超过90%的连接时间服务器进程都是空闲的
Oracle共享服务器提高了服务器的性能,因为任何服务器都可以处理接入的请求,不再等待一个特殊的服务器
使用Oracle共享服务器,同样的配置下可以比独占服务器支持更多的用户,这是因为Oracle共享服务器下用户共享服务器进程
在Oracle共享服务器架构下,客户端进程最终连接到调度器。PMON进程向监听器注册调度器的位置和负载,这样监听器可以把连接请求转发到负载最轻的调度器上。服务的注册不需要在listener.ora文件中进行配置
一个调度器可以并发的支持多个客户端连接。每个客户端绑定到一个虚拟回路。一个虚拟回路其实是一片共享内存,由调度器用来接受及回复客户端的请求。当客户端请求到达时,调度器就把一个虚拟回路放到一个公共队列。一个共享服务器从公共队列中拾取虚拟回路,服务请求,然后放回到调度器的反应队列。这种方法使得一个较小的服务器进程池可以处理大量的客户端
注:如果在Window NT下面配置共享服务器,那么只能是用TCP/IP协议
共享服务器的益处
减少了一个实例的进程数
增加了可能的用户数
达到负载平衡
减少空闲的服务器进程数量
减少内存使用和系统开销
Oracle共享服务器架构要求Oracle Net服务,即使用户进程和服务器实例在同一台主机上
什么时候应该使用独占服务器?
提交批处理任务(这时候服务器几乎没有空闲时间)
以sysdba用户启动、停止和执行恢复
对于大多数平台来说,如果机器有大量的内存可以供独占服务器使用,就使用独占服务器,在这种条件下通常性能更好
(CONNECT_DATA = (SERVICE_NAME = TEST.us.oracle.com)
(SERVER=DEDICATED) -- 指定使用独占服务器
连接到共享服务器
1. 监听器等待客户端的任何请求。当收到请求后,监听器判断把用户进程连接到独占服务器进程还是调度器
2. 如果要传送到调度器,监听器就发给用户进程调度器进程的地址;如果要连接到独占式服务器进程,就产生一个服务器进程给它
3. 一旦连接建立,连接就会持续整个会话
如果用户从一个交叉网络连进来,监听器所选择的调度器进程必须和所要求的网络协议相符合
请求的处理过程
1. 用户发送请求给调度器
2. 调度器把请求放到SGA的请求队列中
3. 共享服务器从队列中拾取请求并处理它
4. 共享服务器把应答信息放到开始的调度器应答队列中
5. 应答由调度器得到,并传送给用户
一旦用户的调用结束,共享服务器进程就释放掉并等待服务请求队列中的下一个请求
请求队列
一个请求队列由所有的调度器共享
共享服务器监视请求队列以获取新的请求
请求以FIFO的原则处理
共享服务器把所有完成的请求返回到对于的调度器应答队列
每个调度器在SGA中有自己的应答队列
每个调度器负责发送完成的请求给相应的用户进程
在一个会话期间,用户始终连接到同一个调度器
SGA和PGA
对于独占服务器,用户的会话信息保存在PGA中;对于共享服务器,用户会话数据保留在SGA中
独占服务器和共享服务器时,SGA和PGA的内容是不同的。独占式服务器时,PGA包括堆栈空间、用户会话数据和游标状态;共享服务器时,PGA只包括堆栈空间,用户的会话数据和游标状态都在SGA中
所有SQL语句的文本和语法格式都保存在SGA中;游标状态信息包括SQL语句的实时内存值,比如取得的行;用户会话数据包括安全和资源的使用信息;堆栈空间包括进程中的本地变量
关于SGA和PGA的改变对于用户来說是透明的。不过,如果支持多个用户,需要增加LARGE_POOL_SIZE的值。MTS可能设置了一个过高的初始值,导致性能问题或者是数据库启动问题。
每个共享服务器进程都需要访问所有会话的数据空间,这样子任何的服务器进程才可以处理任何会话的请求。每个会话的数据空间都在SGA中分配,可以通过设置PRIVATE_SGA来限制每个会话可以分配的空间。Oracle共享服务器所使用的不同的资源可以从v$sysstat中得到
配置Oracle共享服务器
必须的参数:DISPATCHERS和SHARED_SERVERS
可选参数:MAX_DISPATCHERS, MAX_SHARED_SERVERS, CIRCUITS, SHARED_SERVER_SESSIONS
大多数情况下,只要配置DISPATCHERS即可
DISPATCHERS指定对于给定的协议初始启动的调度器
dispatchers = “(PROTOCOL=TCP)(DISPATCHERS=2)(PROTOCOL=IPC)(DISPATCHERS=1)”
可以使用alter system动态改变,缺省值为NULL
下面三个参数只要而且只能要其中一个:PROTOCOL, ADDRESS, DESCRIPTION(和sqlnet.ora里面写法一样)
SESSIONS:每个调度器所支持的最大网络会话,缺省为16K
LISTENER:指定PMON要注册调度器信息的监听器别名。别名必须能够通过一种命名解析方法解析。这个属性只在下列情况下需要:本地监听器没有使用缺省端口并且没有使用LOCAL_LISTENER指定,或者监听器位于另一个节点
CONNECTIONS:指定每个调度器所允许的最大网络连接数。缺省值和系统有关
SHARED_SERVERS:数据库启动时初始化启动的共享服务器进程个数,缺省为0
最好是估计一个较少的数量,因为额外的共享服务器可以动态的分配和释放,而初始的动态服务器即使空闲也不会释放。
可以动态改变这个参数,设为0的话就暂时禁用共享服务器了
MAX_DISPATCHERS:指定可以同时运行的最大调度器数量,可以动态更改;如果调度器已经等于最大数量,但是调度器负载还是很高,可以使用下面的命令增加:
ALTER SYSTEM SET
MAX_DISPATCHERS=new_value;
调度器的负载可以从v$circuit和v$dispatcher视图查看
max_shared_servers:指定可以同时运行的最大的共享服务器个数,允许共享服务器根据请求队列的长度自动分配共享服务器,缺省值为20或者MAX_SERVERS的2倍。推荐观察系统曾经使用过的最大共享服务器个数,这可以从v$shared_server_monitor得到
CIRCUITS:指定可用于接入请求和返回应答的虚拟回路的总个数。有助于SGA的分配。如果配置了Oracle共享服务器,那么缺省值等于SESSIONS,否则为0。
SHARED_SERVER_SESSIONS:用户会话可以运行的Oracle共享服务器总数量,设定这个参数可以保留一部分用户会话用于独占服务器。缺省值是CIRCUITS或者SESSIONS-5之中较小的那个值
其他相关参数
LARGE_POOL_SIZE,SESSIONS
SESSIONS设定了系统允许的最大会话数,对于共享服务器很可能需要调整
使用大型池来分配共享服务器相关的UGA(User Global Area),而不是共享池。因为Oracle使用SGA中的共享池来分配共享的SQL和PL/SQL过程,使用大型池而不是共享池可以减少共享池的碎片。可以通过v$SGASTAT中的POOL列来判断UGA使用的是哪个池。
大型池没有缺省值,最小为300K。如果没有分配,就会使用共享池。
对于每一个配置的会话,Oracle在共享池中为其分配了大概10K的固定数量的内存,这一部分即使分配了大型池也还是位于共享池中。
数据库启动后可以通过lsnrctl services来查看已经向监听器注册的调度器。
使用共享服务器时,应该首先启动监听器,然后在启动数据库,这样调度器可以及时的向监听器注册
使用一个单独的连接,然后查看v$circuit视图,可以知道是否连接到了共享服务器
相关的数据字典视图
V$CIRCUIT:显示连接上来的用户进程
V$SHARED_SERVER:显示共享服务器进程信息
V$DISPATCHER:显示调度器进程的信息
V$SHARED_SERVER_MONITOR:包含调优共享服务器进程的信息
V$QUEUE:包含请求队列和应答队列的信息
V$SESSION:包含每一个当前会话的信息
本文转自
http://kongjian.baidu.com/xu520zl/blog/item/4c219ded6540c04d79f05565.html
目的
完成本课后,应该可以实现下面事情:
了解Oracle共享服务器的组成
描述Oracle共享服务器的架构
配置Oracle共享服务器
了解和解释相关数据视图的使用
共享的服务器进程作为Oracle共享服务器架构的一部分
独占服务器进程的特点:
用户进程和服务器进程是分离的
每个用户进程拥有自己的服务器进程
用户和服务器进程能够允许在不同的机器上,可以利用到分布式处理
用户进程和服务器进程是一对一的关系
即使用户进程没有发出数据库请求,独占式服务器也会存在不过保持空闲
如果用户和服务器进程位于一台主机上,那么相互之间通过IPC机制通信
Oracle共享服务器可以在一个实例中启用共享服务器、独占服务器或者两者共存的服务器
为什么要使用共享服务器?
比如说在一个在线的事物处理环境中,订单处理的应用,用户通过一个应用界面输入数据,超过90%的连接时间服务器进程都是空闲的
Oracle共享服务器提高了服务器的性能,因为任何服务器都可以处理接入的请求,不再等待一个特殊的服务器
使用Oracle共享服务器,同样的配置下可以比独占服务器支持更多的用户,这是因为Oracle共享服务器下用户共享服务器进程
在Oracle共享服务器架构下,客户端进程最终连接到调度器。PMON进程向监听器注册调度器的位置和负载,这样监听器可以把连接请求转发到负载最轻的调度器上。服务的注册不需要在listener.ora文件中进行配置
一个调度器可以并发的支持多个客户端连接。每个客户端绑定到一个虚拟回路。一个虚拟回路其实是一片共享内存,由调度器用来接受及回复客户端的请求。当客户端请求到达时,调度器就把一个虚拟回路放到一个公共队列。一个共享服务器从公共队列中拾取虚拟回路,服务请求,然后放回到调度器的反应队列。这种方法使得一个较小的服务器进程池可以处理大量的客户端
注:如果在Window NT下面配置共享服务器,那么只能是用TCP/IP协议
共享服务器的益处
减少了一个实例的进程数
增加了可能的用户数
达到负载平衡
减少空闲的服务器进程数量
减少内存使用和系统开销
Oracle共享服务器架构要求Oracle Net服务,即使用户进程和服务器实例在同一台主机上
什么时候应该使用独占服务器?
提交批处理任务(这时候服务器几乎没有空闲时间)
以sysdba用户启动、停止和执行恢复
对于大多数平台来说,如果机器有大量的内存可以供独占服务器使用,就使用独占服务器,在这种条件下通常性能更好
(CONNECT_DATA = (SERVICE_NAME = TEST.us.oracle.com)
(SERVER=DEDICATED) -- 指定使用独占服务器
连接到共享服务器
1. 监听器等待客户端的任何请求。当收到请求后,监听器判断把用户进程连接到独占服务器进程还是调度器
2. 如果要传送到调度器,监听器就发给用户进程调度器进程的地址;如果要连接到独占式服务器进程,就产生一个服务器进程给它
3. 一旦连接建立,连接就会持续整个会话
如果用户从一个交叉网络连进来,监听器所选择的调度器进程必须和所要求的网络协议相符合
请求的处理过程
1. 用户发送请求给调度器
2. 调度器把请求放到SGA的请求队列中
3. 共享服务器从队列中拾取请求并处理它
4. 共享服务器把应答信息放到开始的调度器应答队列中
5. 应答由调度器得到,并传送给用户
一旦用户的调用结束,共享服务器进程就释放掉并等待服务请求队列中的下一个请求
请求队列
一个请求队列由所有的调度器共享
共享服务器监视请求队列以获取新的请求
请求以FIFO的原则处理
共享服务器把所有完成的请求返回到对于的调度器应答队列
每个调度器在SGA中有自己的应答队列
每个调度器负责发送完成的请求给相应的用户进程
在一个会话期间,用户始终连接到同一个调度器
SGA和PGA
对于独占服务器,用户的会话信息保存在PGA中;对于共享服务器,用户会话数据保留在SGA中
独占服务器和共享服务器时,SGA和PGA的内容是不同的。独占式服务器时,PGA包括堆栈空间、用户会话数据和游标状态;共享服务器时,PGA只包括堆栈空间,用户的会话数据和游标状态都在SGA中
所有SQL语句的文本和语法格式都保存在SGA中;游标状态信息包括SQL语句的实时内存值,比如取得的行;用户会话数据包括安全和资源的使用信息;堆栈空间包括进程中的本地变量
关于SGA和PGA的改变对于用户来說是透明的。不过,如果支持多个用户,需要增加LARGE_POOL_SIZE的值。MTS可能设置了一个过高的初始值,导致性能问题或者是数据库启动问题。
每个共享服务器进程都需要访问所有会话的数据空间,这样子任何的服务器进程才可以处理任何会话的请求。每个会话的数据空间都在SGA中分配,可以通过设置PRIVATE_SGA来限制每个会话可以分配的空间。Oracle共享服务器所使用的不同的资源可以从v$sysstat中得到
配置Oracle共享服务器
必须的参数:DISPATCHERS和SHARED_SERVERS
可选参数:MAX_DISPATCHERS, MAX_SHARED_SERVERS, CIRCUITS, SHARED_SERVER_SESSIONS
大多数情况下,只要配置DISPATCHERS即可
DISPATCHERS指定对于给定的协议初始启动的调度器
dispatchers = “(PROTOCOL=TCP)(DISPATCHERS=2)(PROTOCOL=IPC)(DISPATCHERS=1)”
可以使用alter system动态改变,缺省值为NULL
下面三个参数只要而且只能要其中一个:PROTOCOL, ADDRESS, DESCRIPTION(和sqlnet.ora里面写法一样)
SESSIONS:每个调度器所支持的最大网络会话,缺省为16K
LISTENER:指定PMON要注册调度器信息的监听器别名。别名必须能够通过一种命名解析方法解析。这个属性只在下列情况下需要:本地监听器没有使用缺省端口并且没有使用LOCAL_LISTENER指定,或者监听器位于另一个节点
CONNECTIONS:指定每个调度器所允许的最大网络连接数。缺省值和系统有关
SHARED_SERVERS:数据库启动时初始化启动的共享服务器进程个数,缺省为0
最好是估计一个较少的数量,因为额外的共享服务器可以动态的分配和释放,而初始的动态服务器即使空闲也不会释放。
可以动态改变这个参数,设为0的话就暂时禁用共享服务器了
MAX_DISPATCHERS:指定可以同时运行的最大调度器数量,可以动态更改;如果调度器已经等于最大数量,但是调度器负载还是很高,可以使用下面的命令增加:
ALTER SYSTEM SET
MAX_DISPATCHERS=new_value;
调度器的负载可以从v$circuit和v$dispatcher视图查看
max_shared_servers:指定可以同时运行的最大的共享服务器个数,允许共享服务器根据请求队列的长度自动分配共享服务器,缺省值为20或者MAX_SERVERS的2倍。推荐观察系统曾经使用过的最大共享服务器个数,这可以从v$shared_server_monitor得到
CIRCUITS:指定可用于接入请求和返回应答的虚拟回路的总个数。有助于SGA的分配。如果配置了Oracle共享服务器,那么缺省值等于SESSIONS,否则为0。
SHARED_SERVER_SESSIONS:用户会话可以运行的Oracle共享服务器总数量,设定这个参数可以保留一部分用户会话用于独占服务器。缺省值是CIRCUITS或者SESSIONS-5之中较小的那个值
其他相关参数
LARGE_POOL_SIZE,SESSIONS
SESSIONS设定了系统允许的最大会话数,对于共享服务器很可能需要调整
使用大型池来分配共享服务器相关的UGA(User Global Area),而不是共享池。因为Oracle使用SGA中的共享池来分配共享的SQL和PL/SQL过程,使用大型池而不是共享池可以减少共享池的碎片。可以通过v$SGASTAT中的POOL列来判断UGA使用的是哪个池。
大型池没有缺省值,最小为300K。如果没有分配,就会使用共享池。
对于每一个配置的会话,Oracle在共享池中为其分配了大概10K的固定数量的内存,这一部分即使分配了大型池也还是位于共享池中。
数据库启动后可以通过lsnrctl services来查看已经向监听器注册的调度器。
使用共享服务器时,应该首先启动监听器,然后在启动数据库,这样调度器可以及时的向监听器注册
使用一个单独的连接,然后查看v$circuit视图,可以知道是否连接到了共享服务器
相关的数据字典视图
V$CIRCUIT:显示连接上来的用户进程
V$SHARED_SERVER:显示共享服务器进程信息
V$DISPATCHER:显示调度器进程的信息
V$SHARED_SERVER_MONITOR:包含调优共享服务器进程的信息
V$QUEUE:包含请求队列和应答队列的信息
V$SESSION:包含每一个当前会话的信息
本文转自
http://kongjian.baidu.com/xu520zl/blog/item/4c219ded6540c04d79f05565.html