为什么我的iSeries / ASP.NET MVC 4应用程序中没有重复使用连接?

前端之家收集整理的这篇文章主要介绍了为什么我的iSeries / ASP.NET MVC 4应用程序中没有重复使用连接?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在 Windows 2008服务器场上运行一个MVC 4 Web应用程序.我们一直在尝试将我们的服务器场升级到Windows 2008 R2 64位服务器,但在iSeries(运行V7R1)上遇到连接池问题.我们经常调用DB2 java存储过程,并启用连接池以减少建立连接所需的时间.以下是我们使用的连接字符串的示例.

< add name =“DB2”connectionString =“ConnectionTimeout = 45; Pooling = true; MinimumPoolSize = 1; MaximumPoolSize = -1; MaximumUseCount = 100; CheckConnectionOnOpen = true; DataSource = XXX; Naming = sql; DataCompression = True; UserID = username; password = pwd; DefaultCollection = XXX“/>

自从进入2008R2以来,iSeries的连接数量(QZDASOINIT作业)稳步增加,从而伤害了iSeries和我们的应用程序的性能.代码库与2008年32位服务器上的代码基本完全相同.我们为Any cpu设置了目标平台,并在IIS中将“启用32位应用程序”设置为True.我们试图在本月早些时候升级到这些服务器,重置IIS并没有自动杀死盒子上的连接,因为它应该是这样,不会创建任何新的连接,直到我们完全恢复到旧的服务器.

几乎看起来它并没有拾起已经建立的连接并且不断创建新的连接.有人知道如果在使用iSeries进行连接池升级到32位到64位时,我们错过了一个步骤?

解决方法

问题的回顾:将ASP.NET MVC 4 Web应用程序从32位Windows 2008服务器场移动到Windows 2008 R2 64位服务器时,在我的IBM上创建的QZDASOINIT作业的数量从2000左右跳到了大约20万.代码库不变,唯一改变的是执行环境.

有关QZDASOINIT作业的一些相关内容…默认情况下,这些作业是在子系统QUSRWRK中创建的(尽管如果在请求ODBC连接时QUSRWRK子系统不活动,它们也可以在QSYSWRK和QSERVER中进行裁剪). QUSRWRK配置为在子系统启动后立即创建其中一个QZDASOINIT作业.如果做出了ODBC请求,并且没有QZDASOINIT作业可用,还会再启动另外两个QZDASOINIT作业.每个QZDASOINIT作业将在结束之前处理200个ODBC请求.所有这些默认值和更多可以使用CHGPJE或CHGSBSD命令进行更改.

QZDASOINIT作业有一个或两个“类”.这些工作的执行可以使用这些类进行微调.

您可以使用DSPACTPJ命令找到有关当前活动的QZDASOINIT作业的信息.

资源:

CHGPJE – Change Prestart Job Entry

CHGSBSD – Change Subsystem Description

CRTCLS – Create Class

DSPACTPJ – Display Active Prestart Jobs

ENDHOSTSVR – End Host Server

ENDSBS – End Subsystem

WRKCLS – Work with Classes

Performance considerations with QZDASOINIT jobs

可能的“解决方案”#1:

在Windows端的连接字符串中,将MaximumPoolSize = -1更改为MaximumPoolSize = XXX,其中XXX是允许您的ASP.NET应用程序运行良好但不降低IBM i性能的某个数字.我建议使用2,000,因为当应用程序在32位服务器上运行时,似乎是可以忍受的.

可能的“解决方案”#2:

让IBM i管理员在IBM i上进行一些更改 – 由于您知道服务器场的IP地址范围,管理员可以设置一个新的子系统,只能为应用程序ODBC连接提供服务.
使用CHGPJE命令更改允许的QZDASOINIT作业的最大数量 – 再次建议从2,000开始,并根据需要进行调整,以满足应用程序对IBM i的性能和影响.如果需要,管理员可以设置一个任务,将终止新子系统中的所有QZDASOINIT作业 – 通过结束该子系统(ENDSBS)或ENDHOSTSVR SERVER(* DATABASE)ENDACTCNN(* DATABASE)(我将结束子系统,但是您的管理员会知道在你的环境中最好的工作).

一些其他建议,不是解决方案本身,但可能有帮助:

限制ASP.NET应用程序中并发执行线程的数量.显然不是一个快速或容易的事情要做,但要放在应用程序的下一次迭代的笔记中.

更改MaximumUseCount = 100以匹配您使用QZDASOINIT作业的任何用户数.

我引用了“解决方案”,因为他们可能允许您将应用程序移动到新环境中,但实际上并不解决问题.

猜你在找的asp.Net相关文章