Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cảnh báo tác nhân SQL Server

Trở thành quản trị viên cơ sở dữ liệu có nhiều trách nhiệm và biết những gì đang xảy ra trên SQL Server của bạn là một trong số đó. Chủ động và cảnh báo lỗi là một trong những đặc điểm khiến ai đó trở thành một DBA tuyệt vời. Và tôi không chỉ nói về những thứ thất bại, đó là điều mà hầu hết mọi người nghĩ về việc được cảnh báo; bạn cũng có thể được cảnh báo về các vấn đề hiệu suất. Trong SQL Server, bạn có khả năng tạo Cảnh báo tác nhân SQL Server (từ bây giờ tôi sẽ gọi là 'cảnh báo') và điều này có thể dễ dàng thực hiện bằng GUI hoặc T-SQL.

Định cấu hình Cảnh báo Tác nhân Máy chủ SQL

Để sử dụng cảnh báo, bạn phải cấu hình Database Mail và SQL Agent Operator. Hầu hết các phiên bản SQL mà tôi gặp đã có Database Mail được định cấu hình cho các thông báo về lỗi công việc. Nếu bạn cần thêm thông tin về cách thiết lập tính năng này, hãy truy cập chủ đề Sách Trực tuyến, "Định cấu hình Thư cơ sở dữ liệu".

Một tác vụ ít được biết đến hơn đang định cấu hình Người vận hành. Bạn có thể tạo Toán tử bằng SSMS hoặc T-SQL. Trong SSMS, mở rộng SQL Server Agent, nhấp chuột phải vào Nhà điều hành và chọn Nhà điều hành mới. Bạn sẽ có một hộp thoại mới mở ra, nơi bạn có thể đặt tên cho nhà điều hành và chỉ định địa chỉ email để thông báo. Tôi thích sử dụng một nhóm phân phối cho các thông báo qua email. Hầu hết các công ty có nhiều hơn một người chịu trách nhiệm về môi trường SQL và nếu bạn chỉ định một nhóm phân phối thì toàn bộ nhóm có thể được thông báo về các cảnh báo. Việc sử dụng các nhóm phân phối cũng giúp việc thêm hoặc xóa mọi người khỏi cảnh báo dễ dàng hơn nhiều.

Dưới đây là ví dụ về ảnh chụp màn hình của hộp thoại Nhà điều hành mới:

Tôi thích sử dụng T-SQL hơn để tôi có thể đảm bảo rằng việc tạo Toán tử là một phần của mẫu xây dựng máy chủ. Mã ví dụ để tạo Toán tử ở trên như sau:

EXEC msdb.dbo.sp_add_operator @name = N'SQL_Alerts', 
  @enabled = 1, 
  @email_address = N'[email protected]';

Khi bạn đã cấu hình Database Mail và Người vận hành, bạn có thể tạo cảnh báo và gán chúng cho Người vận hành.

Nếu sử dụng SSMS, bạn có thể mở rộng SQL Server Agent và sau đó là Cảnh báo. Theo mặc định, không có cảnh báo nào được tạo. Nếu bạn nhấp chuột phải và chọn New Alert, bạn sẽ nhận được một màn hình tương tự như hình bên dưới:

Bạn sẽ nhận thấy rằng trong Mức độ nghiêm trọng, có 25 mã mức độ nghiêm trọng. Giống như âm thanh, mức độ nghiêm trọng của lỗi mô tả mức độ quan trọng của lỗi. Mức độ nghiêm trọng 10 là thông tin trong khi 19-25 là nghiêm trọng và bạn sẽ muốn được thông báo khi những lỗi đó phát sinh. Ví dụ:nếu lỗi 23 nghiêm trọng phát sinh, thì rất có thể bạn đã bị hỏng trong một trong các cơ sở dữ liệu của mình. Tất cả các lỗi nghiêm trọng này đều có thể ảnh hưởng đến hiệu suất của máy chủ của bạn, từ đó ảnh hưởng đến trải nghiệm của khách hàng.

Có một cảnh báo bổ sung mà bạn cần tạo, đối với lỗi 825. Lỗi 825, như Paul Randal mô tả trong bài đăng trên blog của anh ấy, có liên quan đến hoạt động I / O mà SQL Server phải thử lại nhưng cuối cùng vẫn thành công (trong khi lỗi 823 và 824 chỉ ra rằng thao tác thử lại I / O đã được thử lại và cuối cùng không thành công). Lỗi 825 rất quan trọng cần biết vì nó đang cảnh báo bạn về các vấn đề I / O có thể trở nên nghiêm trọng trong tương lai. Mọi nỗ lực thử lại đều không thành công, bạn không nên đợi cho đến khi thao tác I / O không được thông báo. Nếu bạn bắt đầu nhận được thông báo Lỗi 825, bạn cần liên hệ ngay với nhóm lưu trữ và phần cứng của mình.

Bạn có thể tạo từng Cảnh báo bằng cách chỉ định tên và chọn mức độ nghiêm trọng. Đối với Lỗi 825, bạn sẽ chọn Lỗi và nhập số. Đối với Toán tử, tôi thích sử dụng T-SQL hơn. Nếu tôi có thể dễ dàng tập lệnh cho một quy trình thì việc sử dụng lại và đưa vào như một phần của bản dựng máy chủ sẽ dễ dàng hơn nhiều.
Dưới đây, bạn sẽ tìm thấy tập lệnh mà tôi đã sử dụng trên máy trạm SQL Server 2014 Developer của mình. Tập lệnh này tạo từng cảnh báo và thêm thông báo cho cảnh báo vào Toán tử SQL_Alerts.

EXEC msdb.dbo.sp_add_alert @name = N'Severity 19 Error', 
  @message_id = 0,   @severity = 19,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 19 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Severity 20 Error', 
  @message_id = 0,   @severity = 20,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 20 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name=N'Severity 21 Error', 
  @message_id = 0,   @severity = 21,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 21 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Severity 22 Error', 
  @message_id = 0,   @severity = 22,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 22 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Severity 23 Error', 
  @message_id = 0,   @severity = 23,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 23 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Severity 24 Error', 
  @message_id = 0,   @severity = 24,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 24 Error', 
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Severity 25 Error', 
  @message_id = 0,   @severity = 25,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity 25 Error',
  @operator_name = N'SQL_Alerts', @notification_method = 1;
 
EXEC msdb.dbo.sp_add_alert @name = N'Error 825', 
  @message_id = 825,  @severity = 0,  @include_event_description_in = 0;
 
EXEC msdb.dbo.sp_add_notification @alert_name = N'Error 825',
  @operator_name = N'SQL_Alerts', @notification_method = 1;

Nếu bạn đã làm theo, bạn sẽ phải cấu hình thư cơ sở dữ liệu, tạo Người vận hành để gửi email cho bạn hoặc nhóm phân phối về các lỗi tiềm ẩn và Cảnh báo tác nhân SQL được định cấu hình cho Mức độ nghiêm trọng 19 - 25 và lỗi 825.

Điều đó thật tuyệt. Bất kỳ lúc nào một trong những cảnh báo đó được kích hoạt, một email sẽ được gửi đến nhóm của bạn. Ngoài cảnh báo sự kiện, cảnh báo có thể được định cấu hình cho một điều kiện hiệu suất, như tôi đã đề cập trong phần giới thiệu. Ví dụ:nếu việc sử dụng bộ nhớ vượt quá ngưỡng xác định, một cảnh báo có thể được kích hoạt. Tôi khuyến khích bạn khám phá các cảnh báo hiệu suất khác nhau và tạo những cảnh báo mà tổ chức của bạn có thể hưởng lợi. Để tìm cảnh báo điều kiện hiệu suất của SQL Server, trong hộp thoại cảnh báo mới, hãy bấm vào hộp thả xuống cho Loại. Ở đó, bạn sẽ thấy cảnh báo điều kiện hiệu suất SQL Server được liệt kê. Sau khi chọn tùy chọn đó, bạn có thể duyệt qua các loại đối tượng mà bạn có thể định cấu hình cảnh báo điều kiện hiệu suất.

Trong khi chúng tôi đã chỉ định một Toán tử cho phản hồi cảnh báo, bạn cũng có thể định cấu hình cảnh báo để thực thi công việc Tác nhân SQL. Mặc dù điều này mang lại cho bạn sự linh hoạt khi thực hiện nhiệm vụ phản hồi sự kiện, nhưng nó không cung cấp khả năng cảnh báo có điều kiện dễ dàng.

Sử dụng SQL Sentry để cảnh báo nâng cao

Để có cảnh báo nâng cao hơn, bạn cần một công cụ tốt hơn. Đây là nơi SQL Sentry có thể trợ giúp. Một trong những tính năng cảnh báo SQL Sentry yêu thích của tôi là khả năng tạo điều kiện tùy chỉnh để cảnh báo hoặc hành động khi có điều gì đó thay đổi trong môi trường. Ví dụ:nếu ai đó đã thay đổi giá trị bộ nhớ tối thiểu hoặc tối đa, maxdop đã sửa đổi hoặc ngưỡng chi phí cho tính song song, bạn có thể nhận được cảnh báo hoặc thậm chí khởi động một quá trình. Tính năng này đã được giới thiệu trong SQL Sentry v8 và Greg Gonzalez (blog | @SQLsensei) đã viết blog về nó tại đây:"SQL Sentry v8:Intelligent Alerting Redefined."

Với tính năng này, bạn cũng có thể tạo các điều kiện tùy chỉnh cho các cơ sở dữ liệu khác nhau trong một cảnh báo. Nếu bạn đã cố gắng điều này bằng cách sử dụng cảnh báo Tác nhân SQL, bạn sẽ phải tạo các cảnh báo khác nhau cho mỗi cơ sở dữ liệu.

Một tính năng cảnh báo tuyệt vời khác là khả năng tạo các lịch trình cảnh báo khác nhau. Nhiều tổ chức có các nhóm chịu trách nhiệm vào các thời điểm khác nhau trong ngày. Một số có thể để DBA sản xuất chịu trách nhiệm vào giờ ban ngày với Trung tâm điều hành mạng phụ trách ca đêm, sau đó là người trực vào cuối tuần. Thật tuyệt khi có thể tùy chỉnh một lịch trình cảnh báo để thông báo cho các nhóm phù hợp trong giờ làm việc của họ phải không?

Bạn có thể tạo Cửa sổ cảnh báo (như trong một cửa sổ thời gian) và liên kết chúng với các cảnh báo hoặc nhóm khác nhau. Điều này cho phép các cảnh báo khác nhau hoạt động trong các thời gian khác nhau và cho các nhóm khác nhau được thông báo vào các thời điểm khác nhau. Điều này thực sự thú vị vì nó cho phép cảnh báo của bạn tuân theo lịch trình hỗ trợ để những người chính xác được thông báo. Scott Fallen nêu chi tiết về tính năng này trong một bài đăng trên blog, "Cảnh báo về lịch biểu cuộc gọi với SQL Sentry", hướng dẫn bạn cách tạo cảnh báo cho các nhóm đang gọi khác nhau.

Một tính năng cảnh báo khác của Trình tư vấn hiệu suất và Trình quản lý sự kiện là khả năng định cấu hình các phản hồi khác như thực hiện quy trình Windows, ghi sự kiện vào cơ sở dữ liệu hoặc nhật ký lỗi, gửi bẫy SNMP đến một công cụ giám sát khác như SCOM, hoặc thậm chí giết chết một quy trình . Các tùy chọn của bạn hầu như là vô hạn đối với những gì bạn có thể đã xác định trước sẽ xảy ra khi một sự kiện nhất định xảy ra. Cảnh báo tác nhân SQL không thể tùy chỉnh được.

Tóm tắt

Điều quan trọng rút ra từ bài đăng này là bạn hoàn toàn cần phải cảnh báo về các lỗi và điều kiện hiệu suất. Nếu bạn không có một công cụ như SQL Sentry thì việc sử dụng Cảnh báo tác nhân SQL vẫn là một khởi đầu tuyệt vời.

Trong một vài bài đăng tiếp theo, tôi sẽ đi sâu vào một số cảnh báo ảnh hưởng đến hiệu suất này và thảo luận về những hành động bạn cần thực hiện khi chúng phát sinh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server UNION - ORDER BY Behavior mặc định là gì

  2. Trả về thông tin phiên bản hệ điều hành trong SQL Server bằng Chế độ xem quản lý động sys.dm_os_host_info

  3. ASIN () Ví dụ trong SQL Server

  4. Làm cách nào để tôi có thể Chèn dữ liệu vào SQL Server bằng VBNet

  5. Cài đặt Microsoft SQL Server 2012 Enterprise Edition w / Service Pack 1