【问题标题】:SQL Server Query(s) Timeout (both Read/Write) when Report Query is Running报表查询运行时 SQL Server 查询超时(读/写)
【发布时间】:2011-12-01 19:35:06
【问题描述】:

我有一个 SQL Server 2005 数据库,它在工作时间内与同一个数据库有大约 30-40 个连接。

当我执行报告查询(此查询大约需要 30 分钟到 1 小时)时,其他连接在某些特定表上执行选择/写入时开始超时。此报告查询执行 SELECT 与两个或三个级别的子查询和连接。我查看了 SQL Server 日志,根本找不到任何错误。查看 Activity Monitor 不会显示任何进程正在运行,除了 tempdb(显示正在运行)。检查表上是否有锁,只显示共享锁。

我进一步检查了 tempdb 是否有足够的空间(500MB 可以增长到 10GB)。

您知道可能导致此问题的原因吗?我应该从哪里开始看? (我现在正在考虑优化报告查询)

【问题讨论】:

  • 发布您的报告查询或至少其中的相关部分。报告查询中是否还有 NOLOCK 提示?
  • 我闻到行/表锁定和死锁的迹象。

标签: sql-server select timeout report


【解决方案1】:

您肯定需要尝试修复该查询。同时,您可以将报告查询的隔离级别设置为READ UNCOMMITTED

这可以cause inaccuracies in your report(因为它可以读取最终被回滚的事务)但它应该会降低此查询引起的争用。

【讨论】:

  • 谢谢。在开发服务器上,我添加了几个索引,现在查询在几秒钟内运行。哇!。您知道超时问题的原因是什么吗?
  • 嗯,表扫描与索引搜索似乎确实有很大的不同。
  • @cfreak,与索引扫描相比,全表扫描。我将您推荐给this question 以获取更多信息。几乎谷歌“全表扫描与索引”
【解决方案2】:

运行查询时,您需要在数据库上运行配置文件。至少这是最快和最简单的方法。显然,在下班时间进行,这样您就不会因为来自地狱的查询而给您的用户带来负担。不要把这些建议当作福音,但它们肯定会帮助你朝着正确的方向前进。

还要检查查询计划。我相信 2005 允许您在此处生成查询计划。如果没有,您可以获得适用于 SQL Express 2008 的 Management Studio/Analyzer,它可以在 2005 数据库上正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多