zor*_*ack 7 sql-server timeout connection-pooling asp-classic
我们现在已经看到这个问题已经有一段时间了,我真的试图围绕导致它的问题.
一天几次,我们会看到网页开始抛出"[Microsoft] [ODBC SQL Server驱动程序]超时过期"的时间段,然后不久之后页面开始抛出"[Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] SQL Server不存在或访问被拒绝."
我们有许多连接到此数据库服务器的不同应用程序.它平均每秒处理大约2500个并发连接,平均每秒10,000个事务.我们的大多数应用程序都没有任何问题,这些问题似乎只发生在Web服务器上.(也许它与连接池有关?)
我不确定将这个问题归结为什么.有问题的SQL服务器因其所做的工作而被大大削弱,并且配备了每处理器许可.所以我认为我们不会考虑许可/性能问题.
我想可能存在IP连接问题,因此我更改了ConnectionString以使用IP地址并运行了一些长时间运行的ping.我在Web服务器和数据库服务器之间丢失了0个数据包.
ASP连接字符串现在看起来像这样:
Provider=MSDASQL; Driver={SQL Server}; Server=10.0.100.100; Database=DBName; UID=WebUserName; PWD=WebUserPassword; ConnectionTimeout=15; CommandTimeout=120;
Run Code Online (Sandbox Code Playgroud)
用户是使用Sql Server身份验证进行连接的非域用户.所以我不认为这是一个与域名相关的问题.我已经检查了SQL服务器日志文件,并且没有发现与事件相对应的任何内容.
我发现了另一个描述类似行为的stackoverflow问题,但没有解决方案.
细节:
有没有人见过/解决过这种类型的问题?有没有人对我接下来要去哪里有什么建议?
谢谢!
-Zorlack
编辑
谁能告诉我在经典的高负载asp中执行sql查询的最佳实践是什么?我们想尝试利用连接池吗?
在查看代码时,很多看起来像这样:
Set objCn = Server.CreateObject("ADODB.Connection")
objCn.Open(Application("RoConnStr"))
'do some stuff
objCn.Close
Set objCn = Nothing
Run Code Online (Sandbox Code Playgroud)
解决方案(根据ScottE的建议)
这篇文章描述了我的问题.我进行了注册表更改,然后重新启动了服务器.
问题解决了!
您的Web应用程序是否关闭并处置(设置为空)数据库连接?
另外,您是否尝试过使用SQLOLEDB而不是ODBC?想不出你为什么要在这里使用ODBC.
这是我在非常繁忙的经典asp应用程序上的连接字符串:
Dim strcConn
strConn = "Provider=SQLOLEDB; Data Source=someserver; Initial Catalog=somedb; User ID=someuserid; Password=somepassword"
Run Code Online (Sandbox Code Playgroud)
编辑
我发现了这篇博文.有点有趣.
http://www.ryanbutcher.com/2006/02/classic-asp-on-2003-server-with.html