Làm cách nào để chứng minh NOLOCK là nguồn gốc của các vấn đề bế tắc?


8

Tôi không cố bắt đầu một cuộc thảo luận kiểu windows / mac.

Cá nhân, tôi không cần bất kỳ sự thuyết phục nào NOLOCKkhông phải là một ý tưởng tốt như một thực hành phản xạ. Có vẻ như khi bạn đang phát triển mọi thứ nên có mục đích không phản động (/ amen)

Vì vậy, ... lập trình viên phụ trách khẳng định NOLOCKlà con đường để đi. Đề xuất với tất cả các truy vấn đặc biệt và bất cứ khi nào truy vấn sản xuất. Tôi chưa thấy một thủ tục được lưu trữ mà không có gợi ý nolock trên mỗi bảng.

Đừng muốn trở thành anh chàng đó đến và nói với mọi người một niềm tin cốt lõi là tất cả đều sai mà không có gì để sao lưu nó.

Chỉ cần nhìn vào các phiên bình luận dưới các bài đăng trên blog khác nhau, gửi một liên kết có thể là không đủ. Niềm tin từ lâu v.v ... Một số người không tin đó là vấn đề. Xem: Phần bình luận dưới mỗi bài đăng trên blog của nolock tôi đã đọc.

Hiện tại một số DBA khác đang vật lộn với một số bế tắc bí ẩn. Làm thế nào để xác định xem NOLOCK có phải là nguồn không?

Chúng tôi đã đề nghị xem xét XML từ các dấu vết, v.v., nhưng điều này sẽ không nói rõ rằng các bế tắc đang gây ra vấn đề, phải không? Tôi chưa bao giờ thấy các thông báo lỗi thẳng về phía trước. điều đó có đúng không

Làm thế nào khác những bế tắc có thể được ghim trên này?

Các tuyên bố DDL như CREATEsẽ là một đầu mối. Có bất kỳ đầu ra nào mà tôi có thể chỉ ra hoặc một số dữ liệu tôi có thể tìm thấy sẽ giúp chứng thực lý thuyết của tôi trước khi tôi đưa ra cảnh báo không?

Hoặc tôi đang chạy cờ theo dõi hoặc các sự kiện mở rộng để xác định những gì đang chạy khi các bế tắc xảy ra và sau đó suy ra từ các tuyên bố DDL?

Nhìn vào tất cả các cách khác nhau, dữ liệu có thể bị rối tung với các gợi ý nolock, có vẻ như là một vấn đề khó khăn để quyết định ghim xuống.

Câu trả lời:


16

Kiến trúc sư phụ trách làm thế nào để khẳng định NOLOCKlà cách để đi. Đề xuất với tất cả các truy vấn đặc biệt và bất cứ khi nào truy vấn sản xuất. Tôi đã không nhìn thấy một con quay mà không có gợi ý nolock trên mỗi bàn.

Rất tiếc khi biết điều đó. Điều này khá phổ biến được coi là một mô hình chống đối giữa các chuyên gia SQL Server chuyên nghiệp, nhưng bạn có thể không thể làm gì để thay đổi sự thật nếu thực tiễn đã ăn sâu và dựa trên niềm tin chân thành và sâu sắc của một người .

Câu hỏi nói rằng "gửi một liên kết có thể không đủ", nhưng không rõ bạn muốn gì thay vào đó. Chúng tôi có thể viết một cuộc tranh luận hấp dẫn nhất thế giới trong một câu trả lời ở đây, và bạn vẫn sẽ bị "gửi một liên kết" tới nó. Cuối cùng, không ai ở đây có thể biết tập hợp đối số nào sẽ thành công trong tình huống cụ thể của bạn (nếu có).

Tuy nhiên, những điều sau đây bao gồm hầu hết các điểm mà một số người thấy đủ thuyết phục để thay đổi một thực tiễn phổ biến trước đây:

Mặc dù vậy, bạn có thể không thể 'chiến thắng' trận chiến này. Tôi đã làm việc trong một môi trường đã làm điều này, hiểu những rủi ro và lý do không làm điều đó, nhưng dù sao vẫn tiếp tục với nó. Đây là những người thông minh, logic, nhưng cuối cùng, đó là một môi trường mà tôi không thể hạnh phúc khi làm việc.

Hiện tại một số DBA khác đang vật lộn với một số bế tắc bí ẩn. Làm thế nào để xác định đó NOLOCKslà nguồn.

Mô hình thông thường hơn (có lẽ phổ biến hơn trong quá khứ) trong các NOLOCKgợi ý đó được đưa ra trong nỗ lực giảm tỷ lệ bế tắc. Điều này có thể 'hoạt động' trong việc giảm số lượng khóa chia sẻ được thực hiện một cách tự nhiên làm giảm cơ hội khóa không tương thích được thực hiện, nhưng nó không phải là giải pháp tốt cho vấn đề tiềm ẩn và đi kèm với tất cả các lưu ý trong phần trước.

Tuy nhiên, NOLOCKgợi ý có thể giới thiệu những cách mới để bế tắc. Sử dụng cách ly không được cam kết đọc có thể loại bỏ một điều kiện chặn tạm thời (được giải quyết khi tài nguyên dự phòng có sẵn) vào một bế tắc không thể giải quyết được (trong đó không người phục vụ nào có thể tiến triển) chỉ vì sự tranh chấp bây giờ xảy ra ở một điểm khác, trong đó, ví dụ như viết các hoạt động theo một thứ tự khác chồng chéo. Dave Ballantyne có một ví dụ ở đây:

Để có lời khuyên tổng quát hơn về việc xử lý các bế tắc, tôi khuyên bạn nên làm như sau:

Bạn cũng nên làm quen với các tài liệu:

  • Bế tắc (và cả ba chủ đề phụ ở đó)

Các tài nguyên hữu ích khác:


5
"Mặc dù vậy, bạn có thể không thể 'chiến thắng' trận chiến này. Tôi đã làm việc trong một môi trường đã làm điều này, hiểu những rủi ro và lý do không làm điều đó, nhưng dù sao vẫn tiếp tục với nó. cuối cùng, đó là một môi trường mà tôi không thể hạnh phúc khi làm việc. " Điều này đã được chứng minh là câu trả lời chính xác.
user238855
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.