现在流行的数据库有三种进程模式,即1+1,1+N,M+N,分别是一个客服端连接对应一个服务进程,N个客户端连接对应一个服务进程,N个客户端对应M个服务进程。
ORACLE有两种进程模式即dedicated和shared,分别对应1+1模式和M+N模式。
dedicated模式下,oracle的进程模式如下图所示
每一个客户端连接都对应了一个oracle的服务进程,服务进程通过SGA来共享资源,这种模式通常用于极耗资源的大型作业运行,例如RMAN的备份、恢复、大批量的数据导入导出等。使用dedicated模式连接数据库需要在TNS中用SERVER=DEDICATED子句声明。
shared模式下,oracle的进程模式如下图所示
图中可知,客户端连接到服务器时,进程分发模块将客户端连接分配到请求队列中,队列中的连接请求被分配到空的oracle服务进程,事务处理完成后,将结果加入到响应队列,服务器将响应队列中的数据分发给对应的客服端。其中服务器进程是复用的,需要在SGA中保存请求和响应队列
采用这种模式,可以使用少量的资源满足大量的客户端连接请求,但如果大型作业较多可能导致服务器长时间没有响应。该模式通常和链接池配合使用,这样可以复用网络连接等资源,进一步提高服务器的负载能力和响应时间。使用该模式需用SERVER=shared指定
判断oracle连接是专用模式/共享模式方法(dedicated/shared)
1. 如果是dedicated server,则客户端只能创建dedicated server connection
2. 如果是shared server,则客户端能创建dedicated server connection和shared server connection,只要在service name中指定server=dedicated or server=shared.
这个和数据库参数shared_servers、和客户端的TNSname.ora有关。
将shared_servers参数设置为非0既开启了shared_server模式。
在DB端的shared_servers参数控制server是否能接受share server连接,但是,client可以通过在TNSname.ora来设置强制使用DEDICATED。
如下,4种情况:
DB shared_servers = 0 , TNSname.ora server=shared或者不设置 ==> DEDICATED连接
DB shared_servers = 0 , TNSname.ora server=DEDICATED ==> DEDICATED连接
DB shared_servers > 0 , TNSname.ora server=DEDICATED ==> DEDICATED连接
DB shared_servers > 0 , TNSname.ora server=shared或者不设置 ==> Shared连接
Window系统下,通过任务管理列表里,查看Oracle.exe进程所占用的线程数,如果没有这个指标,可以通过view->select columns->checked Thread count.即可。
用sqlplus连接成功以后,thread count如果会增加,即为专用模式,来一个增加一个,走一个减一个。反之,共享模式。
Linux下,通过ps oracle查看oracle的进程个数。 和window的判断方法一样,不过命令不同而已。
参考-》 http://dev.firnow.com/course/7_databases/oracle/oraclejs/20100527/205816.html