我们运行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年