0

考虑持续使用的高度活跃的远程数据库;2 个或更多并发运行的查询会返回大约30m条记录,但在查询中使用 WITH(NOLOCK)会使系统无法使用吗?

高度活跃:大约 200 个用户,查询范围从 1 条记录查询到上述最大值不等。

常数: 18/7

不可用:延迟 5-15 分钟。外部应用程序或用户无法访问数据库进行查询。

4

2 回答 2

1

如果你的意思是

在选择 30m 条记录时使系统对其他用户不可用

不,WITH(NOLOCK)没有任何效果。

请注意,单独选择 30m 条记录可能是一项非常 I/O 敏感的操作,因此我不会随意选择那么多记录,但WITH(NOLOCK)出于所有意图和目的,只会影响执行选择的人的性能.

于 2013-05-15T08:23:14.280 回答
1

您需要酌情调查您的停机时间“不可用”。猜测是行不通的。有许多情况会使服务器“无法使用”,例如:

  • 数据库增长
  • 对数增长
  • 核心转储
  • 调度器耗尽
  • 还有很多

其他时候,服务器可能只是“慢”并且看起来没有响应。扫描 3000 万行表的 200 次查询可能会导致调度程序耗尽。您将需要进行适当的调查。等待和队列是一种很好的方法(例如,它可以正确识别上面提到的调度程序耗尽)。

至于 NOLOCK:永远没有使用 NOLOCK 的正当理由。您的用户现在看到的数据不正确。考虑改用行版本控制

于 2013-05-15T09:25:03.883 回答