Không thể tiếp tục quét bằng NOLOCK do di chuyển dữ liệu


10

Chúng tôi chạy SQL Server 2000 và chúng tôi nhận được một vài lỗi trong số này mỗi đêm.

Could not continue scan with NOLOCK due to data movement

Truy vấn đưa ra lỗi này là một truy vấn phức tạp lớn tham gia trên một tá bảng. Dữ liệu cơ bản của chúng tôi có thể được cập nhật thường xuyên.

"Thực tiễn tốt nhất" về văn hóa là, trong quá khứ, việc giới thiệu các NOLOCKgợi ý đã tăng hiệu suất và cải thiện đồng thời. Truy vấn này không cần phải chính xác 100%, tức là chúng tôi sẽ chịu được các lần đọc bẩn, v.v. Tuy nhiên, chúng tôi đang cố gắng để hiểu tại sao cơ sở dữ liệu lại đưa ra lỗi này, mặc dù chúng tôi có tất cả các gợi ý khóa này.

Bất cứ ai cũng có thể làm sáng tỏ điều này - hãy nhẹ nhàng, tôi thực sự là một lập trình viên, không phải là một DBA :)

PS: Chúng tôi đã áp dụng bản sửa lỗi được đề cập dưới đây: http://support.microsoft.com/kb/815008


3
Tôi sẽ bỏ NOLOCK và sửa truy vấn / chỉ mục / quy trình. Tất nhiên chúng tôi có thể giúp đỡ ... Cũng xem en.wikipedia.org/wiki/Halloween_Pro Hiệu
gbn

3
@QueryKiwi: SQL 2012 phục hồi một cách duyên dáng trong nhiều trường hợp di chuyển dữ liệu theo quét bẩn (tiếp tục trên trang tiếp theo theo thứ tự phân bổ).
Remus Rusanu

1
@QueryKiwi: vâng, vẫn còn. Về tin tốt: cũng là những con trỏ được hỗ trợ bởi quét bẩn nên xử lý việc này một cách duyên dáng hơn.
Remus Rusanu

Câu trả lời:


7

Đây là một vấn đề khá nổi tiếng với SQL Server 2000 - về cơ bản, điều xảy ra là nếu một hàng bị xóa bởi quy trình A trong khi quy trình B đang thực hiện quét (tại READ UNCOMMITTEDhoặc WITH (NOLOCK)), sau đó xử lý B sẽ xảy ra "huh điều gì đã xảy ra với dữ liệu này "Khi nó cố đọc nó. Chính xác hơn, hàng phải được xóa sau khi quá trình B đọc chỉ mục, nhưng trước khi nó cố đọc hàng dữ liệu.

Craig Freedman viết tốt ở đây

May mắn thay, cách khắc phục tương đối đơn giản: http://support.microsoft.com/kb/815008

Nếu điều đó không hiệu quả, bạn có tùy chọn đau đớn hơn một chút là xóa tất cả các WITH (NOLOCK)gợi ý của bạn và đặt mức cô lập giao dịch của bạn thành một cái gì đó ở trên READ UNCOMMITTED.


Chúng tôi đã cập nhật với bản sửa lỗi đó - chúng tôi đã áp dụng cờ, khởi động lại và chúng tôi vẫn nhận được các lỗi này.
Cung thủ Ciaran
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.