Breaking News
Loading...
18/11/2013

Enabling Email Alerts cho SQL Server Deadlocks

Một DBA nên cấu hình SQL Server Instance để có thể nhận cảnh báo một cách tự động cho bất kỳ issue nào xảy ra. Bài viết này chia sẻ cách nhận cảnh báo qua email khi có Deadlock xảy ra trong SQL Server.

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
  1. Cấu hình Error Number là 1205
  2. 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
  1. Database side: dùng try ... catch
  2. Application side: cũng dùng try...catch
Tham khảo:
http://sqlmag.com/blog/enabling-email-alerts-sql-server-deadlocks
http://msdn.microsoft.com/en-us/library/ms186385.aspx

0 comments:

Post a Comment

 
Toggle Footer