SQL活动监视器中的挂起状态

时间:2009-08-25 18:26:43

标签: sql sql-server suspend

什么会导致Management Studio中的查询被暂停?

  1. 我从一张表(有1100万行)中执行一个简单的选择前60000,结果在一两秒内返回。
  2. 我将查询更改为前70000,结果最多需要40分钟。
  3. 通过对另一个相关问题进行一些搜索,我遇到了一个使用DBCC FREEPROCCACHE修复它的人。

    1. 我运行DBCC FREEPROCCACHE然后重新查询70000它似乎工作。
    2. 但是,问题仍然出现在不同的查询中。

      1. 我增加到90000或者如果我尝试使用[Right-> Open Table]打开表格,它会提取大约8000条记录并停止。
      2. 检查活动日志以查看何时执行打开表,显示会话已暂停,等待类型为“Async_Network_IO”。对于运行90000选择的会话,状态为“正在休眠”,这与上面选择的70000查询的状态相同,但是在45分钟内返回。我很奇怪状态显示“睡眠”并且它似乎没有变为“可运行”(我的活动监视器刷新了30秒)。

        附加说明:

        • 我没有同时运行Open Table并选择90000。所有查询都是一次完成一次。
        • 我正在运行32位SQL Server 2005 SP2 CU9。我尝试升级到SP3但遇到了安装失败。在我尝试升级之前,问题就出现了。
        • 服务器设置是主动/主动群集,在任一节点上都会出现问题,而另一个实例没有此问题。
        • 我在同一服务器实例上有~20个其他数据库,但只有这一个数据库才能看到问题。
        • 此数据库相当大。目前它在76756.19MB。数据文件为11,513MB。
        • 我使用远程桌面在“服务器”框中本地登录。

2 个答案:

答案 0 :(得分:9)

等待类型“Async_Network_IO”表示等待客户端检索结果集为SQL Server的网络缓冲区已满。为什么你的客户没有及时提取数据我不能说。

当SQL Server查询远程表时,可能发生的另一种情况是链接服务器,在这种情况下,SQL Server正在等待远程服务器响应。

值得关注的是病毒扫描程序,如果他们监视网络连接,有时候它们可能会滞后,通常它们会占用所有CPU。

答案 1 :(得分:2)

暂停意味着它正在等待资源,并在获取资源时恢复。根据您要撤回的大小来判断,您似乎处于OLAP类型的查询中。

尝试以下方法:

  1. 使用NOLOCK或在查询顶部设置TRANSACTION ISOLATION LEVEL
  2. 检查执行计划并调整查询以提高效率