2010-06-22 77 views
7

我们已经看到这个问题一段时间了,我真的试图围绕导致它的原因。经历了SQL Server“超时”和“SQL Server不存在或访问被拒绝”的经典ASP应用程序

一天几次我们会看到网页开始投掷的时间段[微软] [ODBC SQL Server驱动程序]超时过期“然后不久后页面开始投掷”[Microsoft] [ODBC SQL Server Driver] [ DBNETLIB] SQL Server不存在或访问被拒绝。“

我们有很多不同的应用程序连接到这个数据库服务器。它平均每秒平均有大约2500次并发连接处理。我们的大多数应用程序没有任何问题,问题似乎只发生在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 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 

溶液(每斯科特的建议)描述

This article,一个发球,我的问题。我做了注册表更改,然后重新启动服务器。

问题解决了!

+0

谢谢,我也有这个问题。 虽然它看起来像连接池是红色的鲱鱼。当我使用和不使用连接池进行测试时,服务器仍然创建了数千个处于TIME_WAIT状态的TCP连接。 看起来连接池允许您重新使用连接对象,但这些连接对象有时会在服务器之间创建许多新的TCP连接。 – 2011-06-13 11:11:51

回答

7

您的Web应用程序是否关闭和处理数据库连接(设置为空)?

此外,您是否尝试过使用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

这些是我会看到的两件事情:ODBC向连接添加不必要的抽象,并且无法回收连接是一个常见问题。 – Godeke 2010-06-22 18:00:20

+0

大多数情况下,应用程序在完成时不会将连接对象设置为空。我当时的理解是,通过离开连接对象是可以的,因为当页面完成渲染时,它会超出范围。那时连接池并没有接管? – zorlack 2010-06-22 18:04:33

+0

查看上面的编辑 – zorlack 2010-06-22 18:14:58

0

我有这样的问题的时候,总是与人保持数据开放的客户端应用程序,而不commiting一个“选择..”语句来。

不知道这是否解决了你的问题在这里...虽然。

2

我通过重新创建存储过程解决了这个问题!
只是一个简单的DROP,然后CREATE在我的情况下停止超时!

我曾经患过这个问题一周;一个传统的ASP说“SQL超时”时,我可以在不到一秒钟内直接在数据库上运行相同的查询。 (尽管我没有看到“不存在”的信息)。ASP在整整一个月内都运行良好。

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

由于在使用SQL Management Studio进行测试时proc运行良好,我假定它没有使用缓存计划,但ASP的确如此。

+0

这是一个非常非常好的答案,需要upvotes!一直与ASP工作多年,并从未遇到这个问题(幸好,因为我的程序没有引起任何问题),但这是非常好的信息要记住!谢谢! – Digs 2015-03-19 08:24:50

+0

如果缓存的计划是问题,则可以通过指定SQL明确重新评估缓存计划来减少中断,从而解决此问题:“exec sp_recompile'MyProcedure'”这样可以避免出现意外更改权限的问题。 – Bruce 2017-06-28 21:52:07

相关问题