【问题标题】:SQL Timeout ErrorsSQL 超时错误
【发布时间】:2009-05-27 10:43:42
【问题描述】:

我们在 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 - 但在我这样做之前,我想检查一下我是否错过了可以先尝试的其他东西。

提前致谢!

卡尔。

【问题讨论】:

  • 我已经安装了一些软件来监控 SQL 的性能,这给了我一些有趣的信息 - 但我对如何有效地使用它有点茫然......我的 Seek Time Writes(磁盘等待时间,MS)似乎需要 60 毫秒到 140 毫秒之间 - 正常报告约为 10 到 15 毫秒。此外,高速缓存命中(逻辑读取/物理读取)似乎非常糟糕,物理读取(每秒 RW)似乎在 150 毫秒到 400 毫秒之间......这意味着什么?在明信片上回答......

标签: sql iis asp-classic ado


【解决方案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

【讨论】:

  • 我已经安装了一些软件来监控 SQL 的性能,这给了我一些有趣的信息 - 但我对如何有效地使用它有点茫然......我的 Seek Time Writes(磁盘等待时间,MS)似乎需要 60 毫秒到 140 毫秒之间 - 正常报告约为 10 到 15 毫秒。此外,高速缓存命中(逻辑读取/物理读取)似乎非常糟糕,物理读取(每秒 RW)似乎在 150 毫秒到 400 毫秒之间......这意味着什么?在明信片上回答......
  • 您可以查看“执行批处理”所需的时间。如果它少于十秒,则不会给 Web 服务器超时。我会调查同时连接的数量。
【解决方案2】:

SQL Server 是否有计划(并正在运行)的定期维护计划,包括重建索引?

【讨论】:

    【解决方案3】:

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

    去找出为什么 SQL 语句需要这么长时间。很难说它更简单。您可能会发现在未更改的代码与数据库的其他一些使用 更改之间存在死锁情况。但是你需要去追踪它,不要触碰没有改变的工作代码。

    【讨论】:

      【解决方案4】:

      如果以上这些都不起作用,我会在任务管理器下检查您的页面文件 (PF) 使用情况,看看它在哪里。您可能会因缺少虚拟内存而出现超时错误。如果它看起来接近顶部,请考虑将其增加得更高。在我的应用程序的不同部分,我偶尔会遇到很多 SQL 超时错误。事实证明这是一个性能问题。我建议至少 4000mb 的页面文件,具体取决于您服务器上的内存数量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        相关资源
        最近更新 更多