Làm thế nào để SQL Server xác định thứ tự cần khóa trong khi chọn bảng?


10

Tôi có hai thủ tục được lưu trữ là bế tắc khi hệ thống đang tải. Proc A đang chọn từ một bảng trong khi Proc B đang chèn vào cùng một bảng. Biểu đồ khóa đang hiển thị rằng Proc A có khóa trang chế độ S mà Proc B muốn khóa chế độ IX, tuy nhiên Proc A đang chờ khóa trang chế độ S cho một trang khác mà Proc B đã khóa trang chế độ IX .

Rõ ràng điều này có thể được sắp xếp bằng cách đảm bảo rằng cả hai trang khóa truy vấn trong bảng theo cùng một thứ tự, nhưng tôi không thể tìm ra cách để làm điều đó.

Câu hỏi của tôi là: Làm thế nào để SQL Server xác định thứ tự nào để khóa các trang trong khi thực hiện INSERT và SELECT và làm thế nào bạn có thể sửa đổi hành vi này?

Câu trả lời:


2

Làm thế nào để SQL Server xác định thứ tự nào để khóa các trang trong khi thực hiện CHỌN và CHỌN

Không xác định - được thực hiện bằng cách xử lý nội bộ và tùy thuộc vào đầu ra tối ưu hóa truy vấn.

và làm thế nào bạn có thể sửa đổi hành vi này?

Kiểm soát sự cô lập của bạn. Nếu bạn đọc để viết, hãy báo cho SQL Server ngay lập tức nhận được khóa ghi. Điểm đóng cửa.


1

Hiện tại, Proc A có khóa chia sẻ.

"Không có giao dịch nào khác có thể sửa đổi dữ liệu trong khi khóa (S) được chia sẻ tồn tại trên tài nguyên." http://msdn.microsoft.com/en-us/l Library / aa213039% 28v = sql.80% 29.aspx

Nếu bạn đang ở trên sql 2005 trở lên, hãy thử sử dụng cách ly ảnh chụp nhanh.

"Mức cô lập ảnh chụp nhanh sử dụng phiên bản hàng để cung cấp tính nhất quán đọc ở cấp độ giao dịch. Các thao tác đọc không có khóa trang hoặc hàng; chỉ có khóa bảng SCH-S. Khi đọc các hàng được sửa đổi bởi một giao dịch khác, chúng sẽ truy xuất phiên bản của hàng đó. tồn tại khi giao dịch bắt đầu. Bạn chỉ có thể sử dụng cách ly Snapshot với cơ sở dữ liệu khi tùy chọn cơ sở dữ liệu ALLOW_SNAPSHOT_ISOLATION được đặt BẬT. Theo mặc định, tùy chọn này được đặt TẮT cho cơ sở dữ liệu người dùng. " http://msdn.microsoft.com/en-us/l Library / ms189122.aspx

Vì chỉ có các khóa Sch-S được thu nhận, 'đọc của bạn sẽ không thể chặn ghi' của bạn.

"Khóa ổn định lược đồ (Sch-S) không chặn bất kỳ khóa giao dịch nào, kể cả khóa độc quyền (X)." http://msdn.microsoft.com/en-us/l Library / ms189122.aspx

Hãy ghi nhớ, Cấp độ cách ly Snapshot sử dụng rất nhiều tempdb cho phiên bản hàng, vì vậy hãy kích thước nó một cách thích hợp và tuân thủ các thực tiễn tốt nhất cho các chiến lược đĩa tempdb.

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.