SQL超时错误

时间:2009-05-27 10:43:43

标签: sql iis asp-classic ado

我在W2003 Web服务器上运行的大约30个站点中只有1个出现问题。

可能在当天大约25%的时间内,网站不断返回:与SQL的各种连接上的SQL超时错误(使用ODBC)

我检查并更新了ODBC驱动程序到我能找到的最新版本(3.5.x?),我也检查SQL服务器以查看是否存在问题(另一台服务器运行在通过Gb LAN连接的同一网络上)

IIS日志文件返回“[Microsoft] [ODBC_SQL_Server_Driver] Timeout_expired”

我今天早上遇到了这个问题,所以试图重启SQL服务器以查看它是否是与负载相关的问题 - 但是重启后网站继续产生这些错误大约20分钟(即使我们所有其他网站正在这方面工作) - 然后它停止了超时,现在又恢复了工作。

我试图为网站扩展SQL连接的超时时间,看看这是否有所改变,但似乎没有做过任何事情。

这个网站连续运行了大约3年没有任何问题,我们的服务器上已经有一段时间没有改变 - 这种情况在圣诞节期间开始发生,但是从那以后越来越常规。

我已经完成了所有代码以确保正确打开/关闭数据库连接(站点是经典的ASP),并确保它不会打开太多的并发连接 - 但一切都无济于事我开始了没有想法......任何人?

我唯一的想法是改为OLEDB连接而不是ODBC - 但在我这样做之前,我想检查一下我没有错过的其他东西,我可以先试试。

提前致谢!

卡尔。

4 个答案:

答案 0 :(得分:1)

你提到改变SQL连接的超时,但不清楚究竟什么是超时:它是与数据库的连接,还是查询需要的时间太长?

可能有用的一个工具是Sql Profiler。将其限制为遇到时间的用户或数据库。如果查询长度是一个问题,这应该可以让您深入了解哪些查询运行得很长。

如果连接本身超时,请检查Management Studio中的当前活动。这显示了打开连接的数量;如果它们很大,那么某处可能存在泄漏。您可以通过使用包含以下内容的连接字符串运行来测试开发中的内容:

MAX POOL SIZE=2;

这会导致泄漏,导致连接池快速耗尽。

Mitch Wheat的建议非常好,不准确的统计数据确实会随着时间的推移而恶化。此查询可以告诉您统计信息是否是最新的:

SELECT 
    object_name = Object_Name(ind.object_id),
    IndexName = ind.name,
    StatisticsDate = STATS_DATE(ind.object_id, ind.index_id)
FROM SYS.INDEXES ind
order by STATS_DATE(ind.object_id, ind.index_id) desc

答案 1 :(得分:0)

SQL Server是否有计划(和运行)的常规维护计划,包括重建索引?

答案 2 :(得分:0)

由于您没有更改代码,因此您的连接没有任何问题。

找出SQL语句花了这么长时间的原因。很难说它更简单。您可能会发现在未更改的代码与数据库的某些其他用途之间存在死锁情况,已更改。但是你需要跟踪它,而不是触摸那些没有改变的工作代码。

答案 3 :(得分:0)

如果上述内容不起作用,我会检查任务管理器下的页面文件(PF)使用情况,并查看它的位置。您可以从缺少虚拟内存中获得超时错误。如果它看起来接近顶部,请考虑将其提高。我偶尔会在应用程序的不同部分出现很多SQL超时错误。原来这是一个性能问题。我建议至少4000mb的页面文件,具体取决于你在服务器上的ram数量。