日期:2014-05-16  浏览次数:20541 次

从“如何修改oracle系统连接数”的总结(二)

session & process

?

?

http://blog.csdn.net/jlds123/archive/2011/04/29/6371563.aspx 写道
什么是session

通俗来讲,session 是通信双方从开始通信到通信结束期间的一个上下文(context)。这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器、通过哪个应用程序、哪个用户在登录等信息[在pl/sql developer中,通过Tools-->Sessions可以查看当前数据库的session]。session 是和connection同时建立的,两者是对同一件事情不同层次的描述。简单讲,connection是物理上的客户机同服务器段的通信链路,session是逻辑上的用户同服务器的通信交互。session被应用于oracle层次而非操作系统层次.在不考虑通过专用服务器或共享服务器进行登录的情况下,这个参数限制了对指定实例的并发登陆数.

oracle中一个用户登录oracle服务器的前提,就是该用户具有oracle的 “create session”权限。oracle允许同一个用户在同一个客户机上建立多个同服务器的连接,这一点从oracle的视图V$session中可以看到[select * from v$session;]。每个session都代表了用户与服务器的一个交互。就像两个国家之间可以同时开展很多谈判,经济的,环境的等等。关闭了有关经济的谈判,不会影响到环境谈判的进行。后台进程PMON会每隔一段时间,就会测试用户连接状况,如果连接已断开,PMON会清理现场,释放相关的资源。

在具体的应用场景中connction 和 session 有很多情况:

1. sqlplus 登录 oracle

这种场景比较容易理解,一个连接对应一个session。

2. 其他客户端工具登录oracle

比如:pl/sql developer 登录oracle。pl/sql developer 可以设置是否每个窗口共用同一个session. 如果想在调试窗口调试存储过程或函数,则必须设置为共享session。如果设置为非共享, www.linuxidc.com则每次打开一个操作窗口,pl/sql developer 会利用最初输入的帐户和口令建立新的connection 和 session.

3. IIS 用程序登录oracle

这种情况下,其实是IIS在登录oracle。connection 和 session 的建立情况和iis机制相关。

“对于Oracle来说,安全的Sessions数应该为Sessions = (IIS process number) * (min pool size)。”

IIS进程:在IIS6.0中,采用了新的进程隔离模式来响应用户的请求,在IIS管理器中,可以设置应用程序池的最大进程数。对于新的WEB应用请求,IIS进程管理器会启动多个W3wp.exe进行响应。

什么是process

process:这个参数限制了能够连接到SGA的操作系统进程数(或者是Windows 系统中的线程数),这个总数必须足够大,从而能够适用于后台进程与所有的专用服务器进程,此外,共享服务器进程与调度进程的数目也被计算在内.此外,共享服务器进程与调度进程的数目也被计算在内.因此,在专用服务器环境中,这是一种限制并发连接数的方法.
session与process的关系

oracle的连接数(sessions)与其参数文件中的进程数(process)相关,它们的关系如下:sessions=(1.1*process+5),若果资源允许,而当前process 数过小,那么可以适当增大processs 数( session 数依赖于process数,一般不去直接修改session数)。

Shared Server中的Process 一个对应着Oracle 中的一个或者一个以上的Session。Dedicated Server中,一个session对应一个process,但是一个process未必对应一个session。
如何修改session与process

v$session 每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。
V$process 本视图包含当前系统oracle运行的所有进程信息。常被用于将oracle或服务进程的操作系统进程ID与数据库session之间建立联系。
show parameter sessions 查看当前session配置
show parameter processes 查看当前process配置
alter system set processes=1000 scope=spfile 更改配置,更改完后需要重启数据库。
修改oracle配置文件中process进行修改

?

这个里面说的非常详细。所以通过这篇文章,我理解的数据库连接数其实就是oracle中的session数量,而不是process数量,只是我们平时修改oracle配置时候一般都是去修改process,而session会根据process数量自动计算出来。

在修改processes时候,scope只能是spfile,我试了用memory和both都报错,后来google了一下发现应该是processes这个参数是不能直接在memory中修改。还有修改完processes后,如果有用pfile启动数据库的,就需要加上:create pfile from spfile,把spfile中修改的信息写到pfile文本文件中去。这样下次启动时候就能生效了。

?

?

?

Dedicated Server & Shared Server

?

在了解session与process关系时候,看到了Dedicated Server与Shared Server的不同会对process与session的关系会发生影响。有看了看自己本机数据库session中的server都是dedicted的,然后又问了华泰那边的数据session也都是dedicated的。于是又google了下这2中server的区别:

http://blog.csdn.net/inthirties/archive/2009/10/01/4624760.aspx 写道
Shared Server Architecture
Shared server architecture eliminates the need for a dedicated server process for each connection. A dispatcher directs multiple incoming network session requests to a pool of shared server processes. An idle shared server process from a shared pool of server processes picks up a request from a common queue, which means a small number of shared servers can perform the same amount of processing as many dedicated servers.
Also, because the amount of memory required for each user is relatively small, less memory and process management are required, and more users can be supported.


A number of different processes are