我们运行SQL Server 2000,并且每晚都有一些此类错误。
Could not continue scan with NOLOCK due to data movement
引发此错误的查询是一个大型的复杂查询,连接了十几个表。我们的基础数据可以经常更新。
文化上的“最佳实践”是,过去,引入NOLOCK
提示可以提高性能并提高并发性。该查询不必是100%准确的,即我们可以忍受脏读等。但是,尽管我们拥有所有这些锁定提示,但我们仍在努力理解为什么数据库抛出此错误。
任何人都可以对此有所了解-彬彬有礼,我实际上是程序员,而不是DBA :)
PS:我们已经应用了下面提到的修复程序:http : //support.microsoft.com/kb/815008
3
我将放下NOLOCK并修复查询/索引/过程。我们当然可以提供帮助...另请参见en.wikipedia.org/wiki/Halloween_Problem
—
gbn
@SQLKiwi:SQL 2012在脏扫描下的许多数据移动情况下都能正常恢复(按分配顺序在下一页继续)。
—
Remus Rusanu 2012年
@SQLKiwi:是的,仍然存在。好消息是:脏扫描支持的光标也应该更优雅地处理。
—
Remus Rusanu 2012年