考虑持续使用的高度活跃的远程数据库;2 个或更多并发运行的查询会返回大约30m条记录,但在查询中使用 WITH(NOLOCK)会使系统无法使用吗?
高度活跃:大约 200 个用户,查询范围从 1 条记录查询到上述最大值不等。
常数: 18/7
不可用:延迟 5-15 分钟。外部应用程序或用户无法访问数据库进行查询。
考虑持续使用的高度活跃的远程数据库;2 个或更多并发运行的查询会返回大约30m条记录,但在查询中使用 WITH(NOLOCK)会使系统无法使用吗?
高度活跃:大约 200 个用户,查询范围从 1 条记录查询到上述最大值不等。
常数: 18/7
不可用:延迟 5-15 分钟。外部应用程序或用户无法访问数据库进行查询。
如果你的意思是
在选择 30m 条记录时使系统对其他用户不可用
不,WITH(NOLOCK)
没有任何效果。
请注意,单独选择 30m 条记录可能是一项非常 I/O 敏感的操作,因此我不会随意选择那么多记录,但WITH(NOLOCK)
出于所有意图和目的,只会影响执行选择的人的性能.
您需要酌情调查您的停机时间“不可用”。猜测是行不通的。有许多情况会使服务器“无法使用”,例如:
其他时候,服务器可能只是“慢”并且看起来没有响应。扫描 3000 万行表的 200 次查询可能会导致调度程序耗尽。您将需要进行适当的调查。等待和队列是一种很好的方法(例如,它可以正确识别上面提到的调度程序耗尽)。
至于 NOLOCK:永远没有使用 NOLOCK 的正当理由。您的用户现在看到的数据不正确。考虑改用行版本控制。