我们现在已经看到这个问题了一段时间,我真的试图围绕导致它的问题。
我们每天都会看到网页开始抛出“[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描述了类似的行为,但没有解决方案。
详细信息:
有没有人见过/解决过这种类型的问题?有没有人对我下一步该看哪儿有什么建议?
谢谢!
-Zorlack
修改
有人能告诉我在经典的高负载asp中执行sql查询的最佳做法是什么?我们是否想尝试利用连接池?
在查看代码时,很多看起来像这样:
Set objCn = Server.CreateObject("ADODB.Connection")
objCn.Open(Application("RoConnStr"))
'do some stuff
objCn.Close
Set objCn = Nothing
解决方案(根据ScottE的建议)
This article描述了我的问题。我进行了注册表更改,然后重新启动了服务器。
解决了问题!
答案 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 ..'语句。
不知道这是否能解决你的问题......但是。