数据库连接数超过最大值,紧急求救(200分)

  • 主题发起人 主题发起人 小虎
  • 开始时间 开始时间

小虎

Unregistered / Unconfirmed
GUEST, unregistred user!
<font color=red>环境:</font>
ISAPI程序,D5+M$ SQL Server 7,ADOConnection

<font color=red>症状:</font>
平时运行一切正常,打开页面后不断按F5刷新页面,
如果速度足够快,则IIS的连接数不断上涨(要把日志打开才可以看到)
到达32左右时,DLL发生错误:
<B>Exception: Exception<br>
Message: Maximum number of concurrent connections exceeded. Please try again later<br></B>

<font color=red>分析:</font>
怀疑是客户端请求太快,Server端来不及释放DLL,
于是造成M$ SQL Server的并发连接(concurrent connections)过多
最终导致连接数据库失败。

<font color=red>测试:</font>
目前是在设计期间就将ADOConnection打开,
打算改为DLL启动后再打开,并捕获错误,
如果能实现,就可以证明上面的怀疑
但还没进行

<font color=red>请问:</font>
1、我的怀疑是否正确?
怀疑问题在于M$ SQL Server并发连接数不足

2、以前也曾碰到这种问题,好象是改了Database的什么设置
把连接数增加,就搞定了,可是现在记不起来了,
谁知道??

3、如果是其他原因导致错误,那么:
(a)怎么回事
(b)如何解决
 
Enterprise manager中 rbutton click ,select config....
 
添加一个Session控件,将其AutoSessionName属性设为True.将DataBase的
SessionName设为Session的SessionName试试。
 
enterprise manager中的configure里的user connections就是最大连接数.
如果过一会就没有问题了, 你的怀疑就是完全正确, 否则可能是你程序没有释放连接.
 
ADOConnection 没有 SessionName 属性
 
Enterprise Manager 中的 Configure 里的 User Connections
已经设成 <font color=red>0</font>(Unlimited)了。
不是过一会儿,而是马上就没问题了。
只要 IIS 的连接数降到32以下,马上就没问题了。
这个时间在 LAN 中非常快,还不到一秒。
同时,我还另写了一段程序,不停的开数据库连接。
监视 SQL Server 的连接数,它可以达到几百。
我感觉 User Connections 并不是并发连接数。
另外,Configure 里的 Max Thread Number 已经从256改成512了,还是不行。
 
这个问题已经搞定了
问题不是在数据库连接上,而是ISAPI本身
请看Delphi Help:
TWebApplication.MaxConnections
<font color=darkgreen>Specifies the maximum number of request messages the application can
handle at any one time.</font>

property MaxConnections: Integer;

Description

Set MaxConnections to adjust the number of HTTP request messages the
application can handle simultaneously. Use the ActiveCount and
InactiveCount properties to get a sense of the frequency and duration
of request messages. Then set MaxConnections so that it is high
enough to avoid exceptions when the application runs out of Web
modules, but low enough not to degrade performance too severely by
running too many simultaneous threads.

<font color=darkgreen>If a request message is received when ActiveCount is already at
MaxConnections, the application raises an exception.</font>

Note: <font color=darkgreen>MaxConnections is only meaningful for ISAPI applications.
Each CGI application handles only a single request message.</font>

然后再看Delphi源代码:
//HTTPApp.pas
constructor TWebApplication.Create(AOwner: TComponent);
begin
...
<font color=darkgreen><B>FMaxConnections := 32;</B></font>
...
end;


 
哇,原来是这样,Energy鼻子冒出一股浓血。
!!! 那你为何要诱导我们 !!!
 
嘿嘿,还是服务器端的COM构件好,没有这些个麻烦
 
我晕,要不是蚯蚓大家又会把这个问题作为DELPHI的一个BUG,其实她也是一片好心。
 
接受答案了.
 
后退
顶部