Trước tiên phải cấu hình được Database Mail trong SQL Server và phải enable tính năng email trong SQL Server Agent.
Có 2 cách để tạo Alert cho Deadlock
- Cấu hình Error Number là 1205
- Cấu hình dùng WMI
Cả 2 cách đều được cấu hình qua giao diện tạo Alert trong SQL Server Management Studio:
Cách 1: Tạo Alert dùng Error Number 1205
Điền thông tin như hình sau
Tiếp theo, ở tab Response, setup Operator, tức là người sẽ nhận email cảnh báo
Bây giờ sẽ thử tạo ra 1 deadlock để xem có nhận được email cảnh báo hay không. Câu trả lời là không. Nguyên nhân là khi Deadlock xảy ra, SQL Server sẽ trả về cho ta mã lỗi 1205 như ta cấu hình Alert ở trên, nhưng SQL Server không lưu lại sự kiện này, do đó Alert sẽ không làm việc.
Để khắc phục hạn chế này, ta phải cấu hình để bắt SQL Server lưu lại sự kiện Deadlock này, dùng đoạn Script sau:
EXEC master..sp_altermessage 1205, 'WITH_LOG', TRUE; GO
Bây giờ thử tạo lại deadlock, ta sẽ nhận được email như hình sau:
Lưu ý là ngoài mã lỗi 1205 như ở trên, còn có 2 mã là 1211 và 3928 liên quan đến Deadlock, do đó ta cần cấu hình Alert thêm cho 2 mã lỗi này.
Cách 1: Tạo Alert dùng WMI, cái này cấu hình rất nhanh, cũng tương tự như trên, nhưng ta đổi 1 ít thông tin
Cách dùng WMI để lưu luôn thông tin về Deadlockgraph:
http://technet.microsoft.com/en-us/library/ms186385.aspx
Khi xử lý Deadlock trong T-SQL, ta sẽ xử lý Exception có mã là 1205 do SQL Server trả về.
Ta có thể xử lý Deadlock theo 2 cách
- Database side: dùng try ... catch
- Application side: cũng dùng try...catch
http://sqlmag.com/blog/enabling-email-alerts-sql-server-deadlocks
http://msdn.microsoft.com/en-us/library/ms186385.aspx
0 comments:
Post a Comment