Mặc dù chúng ta đều biết khóa là điều cần thiết để đảm bảo tính toàn vẹn của dữ liệu, nhưng nó không thay đổi được thực tế rằng nó có thể là một cái gai nghiêm trọng đối với bạn!
Khi chúng tôi thấy việc chặn trong cơ sở dữ liệu của mình, chúng tôi thường cho rằng có điều gì đó không ổn - không phải lúc nào cũng vậy. Theo kinh nghiệm của tôi, phần lớn việc chặn SQL Server là hợp pháp, nhưng nó cần được điều tra và hiểu rõ. Mặt khác, bế tắc hiếm khi hợp pháp! Các deadlock được coi là rất quan trọng trong thế giới SQL Server vì các tiến trình sẽ tự động bị giết, vì SQL Server giải quyết các deadlock mà không cần can thiệp thủ công. Một lần nữa, mặc dù chúng đã được “giải quyết”, chúng chắc chắn cần được điều tra và hiểu rõ.
Có một số chiến lược thiết kế có thể giúp giảm sự xuất hiện của việc chặn và bế tắc Máy chủ SQL trong cơ sở dữ liệu của bạn:
- Sử dụng các chỉ mục được phân nhóm trên các bảng có mức sử dụng cao
- Tránh các câu lệnh SQL có số lượng hàng cao
- Chia nhỏ các giao dịch dài thành nhiều giao dịch ngắn hơn
- Đảm bảo rằng các câu lệnh UPDATE và DELETE sử dụng các chỉ mục
- Không lên lịch các công việc cập nhật hàng loạt để chồng chéo
- Luôn cập nhật số liệu thống kê của bạn
Và tôi chắc chắn rằng còn nhiều điều khác nữa, nhưng thực tế là bạn có thể làm theo tất cả các phương pháp hay nhất mà bạn có thể nghĩ ra mà vẫn gặp phải tình trạng chặn và bế tắc. Điều này là do, trong hầu hết các trường hợp, sự cố tắc nghẽn là do mã ứng dụng được thiết kế kém. (Lỗ hổng trong thiết kế ứng dụng:mã hóa, cách ly giao dịch và các mẫu truy cập. Nhưng hiện tại, chúng ta hãy tập trung vào việc điều tra và tìm hiểu các quy tắc chặn và bế tắc).
Chặn và bế tắc máy chủ SQL
Thách thức đầu tiên với chặn và bế tắc là xác định thời gian và vị trí chúng đang xảy ra bởi vì chúng thường không được báo cáo, báo cáo sau thực tế hoặc giải quyết tự động. Để hiểu thực sự những gì đang xảy ra trong cơ sở dữ liệu của bạn liên quan đến việc chặn và bế tắc, bạn cần xem sự xuất hiện của chúng theo thời gian. Ngoài ra, để khắc phục sự cố và ngăn chặn các sự cố xảy ra trong tương lai, bạn cần phải tìm ra nguyên nhân gốc rễ của việc chặn – tự trang bị thông tin cần thiết để chuyển lại cho các nhà phát triển ứng dụng và do đó chấm dứt trò chơi đổ lỗi giữa các nhà phát triển. và DBA.
Đây là lý do tại sao tôi thực sự thích Trình phân tích khối lượng công việc trong Spotlight Cloud. Tôi có thể chọn phạm vi thời gian - một giờ, một ngày hoặc một phạm vi tùy chỉnh - và xem Khóa -hoạt động liên quan cho phạm vi đó. Nói thẳng ra, tôi hiểu rõ hơn về những gì đang diễn ra! Tôi có thể xem các mẫu khóa, so sánh tỷ lệ khóa theo thời gian so với khoảng thời gian trước đó, xem tỷ lệ chặn trong một khung thời gian cụ thể và xem các KPI khóa như Khóa riêng, Chia sẻ &Cập nhật.
Vì vậy, bây giờ tôi muốn tìm hiểu nguyên nhân gốc rễ - đó là nguyên nhân của Cây kích thước tham gia. Tôi có thể xem chi tiết và lọc thông tin cho một khung thời gian cụ thể, cho phép tôi xem cùng một thông tin ở các thứ nguyên sâu hơn, chẳng hạn như Cơ sở dữ liệu , Người dùng , Chương trình và Câu lệnh SQL , đồng thời lọc ra "tiếng ồn trắng" khi tôi tiếp tục - xác định rõ ràng (các) nguồn gốc của vấn đề của tôi.
Đây, tôi đang xem Cơ sở dữ liệu nào đang bị khóa nhiều nhất trong khoảng thời gian:
Bây giờ, tôi sẽ đi sâu vào Người dùng trong cơ sở dữ liệu đã chọn:
Sau đó, tôi sẽ chọn xem danh sách Câu lệnh SQL gây ra khóa được thực thi bởi Người dùng đã chọn trong Cơ sở dữ liệu đã chọn trong Phạm vi thời gian được chỉ định .
Bây giờ, tôi có thể xem tất cả Khóa thông tin liên quan cho Câu lệnh SQL đã chọn .
Vì vậy, nếu bạn muốn giải quyết tận cùng các vấn đề về khóa, chặn và bế tắc, tôi khuyên bạn nên xem Spotlight Cloud. Spotlight Cloud giúp việc điều tra và hiểu các vấn đề về khóa trong cơ sở dữ liệu trở nên dễ dàng hơn bao giờ hết và cuối cùng đảm bảo rằng mã ứng dụng của bạn không có bế tắc.