10

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

  1. 我从一个表(有 1100 万行)中执行一个简单的 select top 60000,结果在一两秒内返回。
  2. 我将查询更改为前 70000,结果最多需要 40 分钟。

通过对另一个但相关的问题进行一些搜索,我发现有人使用 DBCC FREEPROCCACHE 来修复它。

  1. 我运行 DBCC FREEPROCCACHE,然后重做 70000 的查询,它似乎工作。

但是,使用不同的查询仍然会出现此问题。

  1. 我增加说 90000 或者如果我尝试使用 [Right->Open Table] 打开表,它会提取大约 8000 条记录并停止。

在我执行 Open Table 时检查活动日志显示会话已暂停,等待类型为“Async_Network_IO”。对于运行选择 90000 的会话,状态为“睡眠”,这与上述选择 70000 查询的状态相同,但在 45 分钟内返回。令我感到奇怪的是,状态显示为“正在睡觉”,而且它似乎没有变为“可运行”(我让活动监视器每 30 秒刷新一次)。

补充笔记:

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

2 回答 2

10

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

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

值得一看的是病毒扫描程序,如果它们正在监视网络连接,有时它们可​​能会滞后,这通常表现为它们占用所有 CPU。

于 2009-08-25T19:00:28.070 回答
2

挂起意味着它正在等待资源,并在获得资源时恢复。从您撤回的大小来看,您似乎处于 OLAP 类型的查询中。

尝试以下操作:

  1. 使用 NOLOCK 或在查询顶部设置 TRANSACTION ISOLATION LEVEL
  2. 检查您的执行计划并调整查询以提高效率
于 2009-08-25T19:04:10.137 回答