惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
Microsoft Security Blog
Microsoft Security Blog
Jina AI
Jina AI
博客园 - 叶小钗
J
Java Code Geeks
博客园 - 聂微东
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
美团技术团队
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
罗磊的独立博客
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
小众软件
小众软件

博客园 - 释子

Centos单网卡配置多个IP的方法 windows下ruby安装环境配置 归来,冒个泡泡 SGA设置错误导致数据库无法连接问题 盖茨微软亚洲研究院十年创新论坛讲演实录 新产品发布 杂志上看到的老板 “经验汇”团队成立,让我们一起分享经验和快乐 《SOA In the real world》第一章译稿(含下载) 《Service Oreiented Architecture in the Real World》推荐及翻译计划 安装VSTFS后遗症解决方法 小心NLS_SORT和NLS_COMP的设置成为性能杀手 Microsoft Visual Studio International Pack 1.0 过度配置与过度设计一样可怕 解除SourceSafe锁定的小技巧 比尔盖茨退休告别演说:下个数字十年 始信 体验了一下用word 2007发表博客 编程活动中几个不良现象
细说Oracle Session
释子 · 2007-12-19 · via 博客园 - 释子

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

    

对于使用.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进程数。

在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。

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