Veri hareketi nedeniyle NOLOCK ile taramaya devam edilemedi


10

SQL Server 2000 çalıştırıyoruz ve bu hatalardan birkaçını her gece alıyoruz.

Could not continue scan with NOLOCK due to data movement

Bu hatayı atan sorgu, bir düzine tablo üzerinde birleştirilen büyük karmaşık bir sorgudur. Temel verilerimiz sık sık güncellenebilir.

Kültürel 'en iyi uygulama', geçmişte NOLOCKipuçlarının kullanılmasının performansı ve geliştirilmiş eşzamanlılığı artırmasıdır. Bu sorgunun% 100 doğru olması gerekmez, yani kirli okumaları vs. tolere edeceğiz. Ancak, tüm bu kilitleme ipuçlarına sahip olmamıza rağmen veritabanının neden bu hatayı attığını anlamak için uğraşıyoruz.

Herkes bu konuda biraz ışık tutabilir - nazik olun, ben aslında bir programcıyım, DBA değil :)

Not: Daha önce aşağıda belirtilen düzeltmeyi uyguladık: http://support.microsoft.com/kb/815008


3
NOLOCK bırakın ve sorgu / dizinleri / işlemi düzeltmek. Biz de bakın ... elbette yardımcı olabilir en.wikipedia.org/wiki/Halloween_Problem
GBN

3
@SQLKiwi: SQL 2012, kirli taramalar altında birçok veri hareketi durumunda zarif bir şekilde kurtarır (ayırma sırasında sonraki sayfada devam eder).
Remus Rusanu

1
@SQLKiwi: evet, hala var. İyi haber: kirli taramalarla desteklenen imleçler de bunu daha zarif bir şekilde ele almalıdır.
Remus Rusanu

Yanıtlar:


7

Bu, SQL Server 2000 ile oldukça iyi bilinen bir sorundur - temel olarak, bir satır B işlemi bir tarama yaparken (ya READ UNCOMMITTEDda WITH (NOLOCK)) yaparken A işlemi tarafından bir satır silinirse , o zaman B işlemi bu verilere ne olur? "okumaya çalıştığında." Daha kesin olarak, B işlemi dizini okuduktan sonra, ancak veri satırını okumaya çalışmadan önce satırın silinmesi gerekir.

Craig Freedman burada güzel bir yazı yazıyor

Neyse ki, düzeltme nispeten basittir: http://support.microsoft.com/kb/815008

Bu işe yaramazsa, tüm WITH (NOLOCK)ipuçlarınızı kaldırma ve işlem yalıtım düzeyinizi yukarıdaki bir şeye ayarlama konusunda biraz daha acı verici seçeneğiniz vardır READ UNCOMMITTED.


Bu düzeltmeyle günceliz - bayrağı uyguladık, yeniden başlattık ve hala bu hataları alıyoruz.
Ciaran Archer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.