当前位置:Gxlcms > 数据库问题 > Oracle 11g DRCP连接方式——基本原理

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

时间:2021-07-01 10:21:17 帮助过:20人阅读

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的支持还不存在。

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

标签:show   接收   sys   jdb   rom   如何   red   .exe   小数   

人气教程排行