经验SQL Server“超时”和“SQL Server不存在或访问被拒绝”的经典ASP应用程序

时间:2010-06-22 17:21:01

标签: sql-server asp-classic timeout connection-pooling

我们现在已经看到这个问题了一段时间,我真的试图围绕导致它的问题。

我们每天都会看到网页开始抛出“[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;

用户是使用Sql Server身份验证进行连接的非域用户。所以我不认为这是一个与域名相关的问题。我已经检查了SQL服务器日志文件,并且没有发现与事件相对应的任何内容。

我发现another stackoverflow question描述了类似的行为,但没有解决方案。

详细信息:

  • Web服务器:Windows 2003 Standard SP2,IIS 6。
  • 数据库服务器:Microsoft SQL Server 9.0.4035

有没有人见过/解决过这种类型的问题?有没有人对我下一步该看哪儿有什么建议?

谢谢!

-Zorlack

修改

有人能告诉我在经典的高负载asp中执行sql查询的最佳做法是什么?我们是否想尝试利用连接池?

在查看代码时,很多看起来像这样:

Set objCn = Server.CreateObject("ADODB.Connection") 
objCn.Open(Application("RoConnStr"))
'do some stuff
objCn.Close
Set objCn = Nothing

解决方案(根据ScottE的建议)

This article描述了我的问题。我进行了注册表更改,然后重新启动了服务器。

解决了问题!

3 个答案:

答案 0 :(得分:7)

您的网络应用是否关闭并处置(设置为空)数据库连接?

另外,您是否尝试过使用SQLOLEDB而不是ODBC?想不出你为什么要在这里使用ODBC。

这是我在非常繁忙的经典asp应用程序上的连接字符串:

Dim strcConn
strConn = "Provider=SQLOLEDB; Data Source=someserver; Initial Catalog=somedb; User ID=someuserid; Password=somepassword"

修改

我发现了这篇博文。有点有趣。

http://www.ryanbutcher.com/2006/02/classic-asp-on-2003-server-with.html

答案 1 :(得分:2)

我通过重新创建存储过程解决了这个问题!
只需一个简单的DROP然后CREATE就可以停止我的超时!

我这个问题已经遭遇了一个星期;一个经典的ASP说“SQL超时”,我可以在不到一秒的时间内直接在数据库上运行相同的查询。 (虽然我没有看到“不存在”的消息。)ASP已经工作了整整一个月。

我的一位天才朋友说,“通过ASP使用'缓存'执行计划,效率不高。尝试删除和重新创建。这确实表明您的存储过程可以重写以提高效率,因为它可能再次发生。“

由于在使用SQL Management Studio进行测试时,proc运行正常,我认为它没有使用缓存计划,但ASP确实如此。

答案 2 :(得分:0)

我遇到这些问题的时候,总是不得不与某人在客户端应用程序中打开数据而不提交'select ..'语句。

不知道这是否能解决你的问题......但是。