oracle session简介

什么是session
通俗来讲,session 是通信双方从开始通信到通信结束期间的一个上下文(context)。这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器、通过哪个应用程序、哪个用户在登录等信息[在pl/sql developer中,通过Tools-->Sessions可以查看当前数据库的session]。session 是和connection同时建立的,两者是对同一件事情不同层次的描述。简单讲,connection是物理上的客户机同服务器段的通信链路,session是逻辑上的用户同服务器的通信交互。

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。如果设置为非共享, 则每次打开一个操作窗口,pl/sql developer 会利用最初输入的帐户和口令建立新的connection 和 session.

3. IIS 用程序登录oracle
这种情况下,其实是IIS在登录oracle。connection 和 session 的建立情况和iis机制相关。(以下是参考了网友的观点,文章来源:http://www.cnblogs.com/)
“对于Oracle来说,安全的Sessions数应该为Sessions = (IIS process number) * (min pool size)。”
IIS进程:在IIS6.0中,采用了新的进程隔离模式来响应用户的请求,在IIS管理器中,可以设置应用程序池的最大进程数。对于新的WEB应用请求,IIS进程管理器会启动多个W3wp.exe进行响应。

4、 其他情况 有待各路英雄补充

orcale的session内存
oracle 的连接分为两种:独占式,共享式。
在独占式连接情况下,session(如游标,排序去,sql区)是在PGA中分配的。
在共享式连接情况下,session的一部分(如UGA)是在中SGA的larg pool中分配的。

oracle session 和process
oracle中每个process 都有对应的session。
process 分为
用户进程在V$session 中可用条件:$session.type = ‘USER’.查询。
后台进程在V$session 中可用条件:$session.type = ‘BACKGROUND’查询。

常见的后台进程:
SMON,PMON,DBWR,LGWR,MMAN,MRP, RFS,RECO,CKPT,ARCH,Dnnn,Snnn,LMON,LMD0,QMNn,TRWR,WMON,LCKnnn,SNPnnn, MMON,DMON,SNP

session 相关的初始化参数:
process:oracle的连接数(sessions)与其参数文件中的进程数(process)相关,它们的关系如下:sessions=(1.1*process+5),我们可以通过修改inia.ora的这个process参数在更改可连接的最大session数。
workarea_size_policy:PGA用手动管理还是自动管, 在AUTO的时候每个session最多能用到5%或100M.

以上内容 来自itpub论坛

其他参考:http://www.cnblogs.com/yanrongpi/archive/2007/12/19/1006447.html

细说Oracle Session

     管理Oracle Session是后台DBMS采用Oracle的信息管理系统的一个重要工作。如果管理不当,会对系统的性能和运行的稳定性产生非常大的影响。Oracle Session是非常宝贵的资源,其数量通常都是有一个固定的设定值,对于Oracle 10g Enterprise Edition来说,如果不修改初始化参数,那么默认最大的Session数为170个,在后期系统管理员可以根据实际的需要来修改这个数值。因此系统必须非常小心的管理这些Session。本文主要就多层分布式系统中Oracle Session的管理提供解决方案。下图是本文所述的多层分布式管理系统的模型图,层与层之间的调用关系如图所示。

    oracle session简介_第1张图片

    

对于使用.NET Framework作为开发平台的系统来说,如果是Web Application或者Smart Client Application,在中间件层,应用程序服务器多采用IIS,业务逻辑组件和数据访问组件通常寄宿在IIS进程中运行。如果采用此种部署方案,那么影响Oracle Session的主要是两种因素:

1)IIS进程数;

2)连接池的设置。

一、连接池对Oracle Session的影响

     在现代的软件设计中,为了提高系统的性能,在数据访问层通常会采用连接池来改善数据库连接的效率来改善系统的性能,很多人可能不知道连接池的配置对Oracle Session的产生有着至关重要的影响。连接池对Oracle Session影响主要有两个因素:

1)对于ADO.NET来说,对于不同的连接字符串会产生不同的连接池。

2)min pool size的值。

对于使用了连接池的数据访问层来说,Oracle Session的产生机制为:minsessions=(连接池数)X(min pool size)。值得注意的是每次产生新的Oracle Session是在不同AppDomain边界产生的时候发生的,也就是说不同的进程每执行一次就会产生minsessions个oracle Session,直到这个进程结束才会释放这些session。

二、IIS进程数对Oracle Session的影响

在IIS6.0中,采用了新的进程隔离模式来响应用户的请求,管理员可以设置多个进程来满足实际的需要。IIS进程管理器(实际上是inetinfo.exe)负责调度这些进程。在IIS管理器中,我们可以这样来增加IIS进程数。

oracle session简介_第2张图片

在Web 园中,我们可以设置最大工作进程数。设置完以后,打开任务管理器,如果有请求发过来,我们可以看到多了很多W3wp.exe。

上文说到Oracle Session是在不同的AppDomain边界产生的时候发生的,因此不同的请求发送到IIS以后,每一个IIS进程使Oracle产生min pool size个Sessions。按照这个推算,那么实际产生的会话数为:

Sessions = (IIS process number) X (min pool size)。

从上文的分析中我们可以得出,对于Oracle来说,安全的Sessions数应该为Sessions = (IIS process number) X (min pool size)X(连接池数)。假定连接池数为1,连接池min pool size为10,iis进程数为30,那么安全的Oracle Sessions的数量应该为300。如果不按照这个数量进行设置,那么系统运行的过程中IIS会经常报告一些莫名奇妙的错误,如认证失败。很多人可能会认为IIS已经Crash了,实际上是由于Session的数量超过了Oracle允许的数量。

当然我们还必须将由于程序异常处理不当等造成的坏死的Session的可能数量计算在内。为了保证系统的运行问题,应该在上文所说的计算方法上加一个保险值,如350。

以上内容是在实践的过程中得出的经验计算公式,不对的地方请指正。

来源:http://lianhong2000.blog.163.com/blog/static/66743512200976115537764/


你可能感兴趣的:(oracle session简介)