sql >> データベース >  >> RDS >> Sqlserver

SQLServerエージェントアラート

    データベース管理者になるには多くの責任があり、SQLServerで何が起こっているかを知ることもその1つです。先を見越してエラーを警告することは、誰かを優れたDBAにする特徴の1つです。そして、私は単に失敗したことについて話しているのではありません。それはほとんどの人が警告を受けていると考えていることです。パフォーマンスの問題についてもアラートを受け取ることができます。 SQL Server内で、SQL Serverエージェントアラート(これからは単に「アラート」と呼びます)を作成することができます。これは、GUIまたはT-SQLを使用して簡単に実行できます。

    SQLServerエージェントアラートの構成

    アラートを使用するには、データベースメールとSQLエージェントオペレーターを構成する必要があります。私が遭遇したほとんどのSQLインスタンスには、ジョブ失敗通知用に構成されたデータベースメールがすでにあります。この機能の設定に関する詳細情報が必要な場合は、BooksOnlineのトピック「データベースメールの構成」にアクセスしてください。

    あまり知られていないタスクは、オペレーターの構成です。 SSMSまたはT-SQLを使用して演算子を作成できます。 SSMS内で[SQLServerエージェント]を展開し、[オペレーター]を右クリックして、[新しいオペレーター]を選択します。新しいダイアログボックスが開き、オペレーターに名前を付けて、通知する電子メールアドレスを指定できます。電子メール通知には配布グループを使用することを好みます。ほとんどの企業にはSQL環境の責任者が複数います。配布グループを指定すると、チーム全体にアラートを通知できます。配布グループを使用すると、アラートへのユーザーの追加やアラートからの削除もはるかに簡単になります。

    以下は、[新しい演算子]ダイアログのスクリーンショットの例です。

    オペレーターの作成がサーバービルドテンプレートの一部であることを確認できるように、T-SQLを使用することを好みます。上記の演算子を作成するためのサンプルコードは次のとおりです。

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

    データベースメールとオペレーターを構成したら、アラートを作成してオペレーターに割り当てることができます。

    SSMSを使用している場合は、SQLServerエージェントを展開してからアラートを展開できます。デフォルトでは、アラートは作成されません。右クリックして[新しいアラート]を選択すると、次の図のような画面が表示されます。

    [重大度]の下に、25の重大度コードがあることに気付くでしょう。聞こえるように、エラーレベルの重大度は、エラーの重要性を表します。重大度10は情報提供であり、19〜25は致命的であり、これらのエラーが発生したときに通知を受け取る必要があります。たとえば、重大度23のエラーが発生した場合は、データベースの1つが破損している可能性があります。これらの致命的なエラーはすべてサーバーのパフォーマンスに影響を与える可能性があり、それが顧客体験にも影響を及ぼします。

    エラー825については、作成する必要のある追加のアラートがあります。PaulRandalがブログ投稿で説明しているように、エラー825は、SQLServerが再試行する必要があったが最終的には成功するI/ O操作に関連しています(エラー823と824は、I / O再試行操作が再試行され、最終的に失敗したことを示します)。エラー825は、将来致命的になる可能性のあるI / Oの問題を警告しているため、知っておくことが重要です。再試行の試みはすべて悪いので、I/O操作の通知に失敗するまで待つべきではありません。エラー825メッセージが表示され始めた場合は、すぐにストレージチームとハードウェアチームに連絡する必要があります。

    名前を指定して重大度を選択することにより、各アラートを作成できます。エラー825の場合、[エラー]を選択し、番号を入力します。演算子と同様に、私はT-SQLを使用することを好みます。プロセスを簡単にスクリプト化できれば、再利用してサーバービルドの一部として含めることがはるかに簡単になります。
    以下に、SQL Server2014Developerワークステーションで使用したスクリプトを示します。このスクリプトは、各アラートを作成し、アラートの通知をオペレーター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;

    従うと、データベースメールが構成され、潜在的なエラーについて電子メールで送信するオペレーターが作成され、SQLServerエージェントアラートが重大度19〜25およびエラー825用に構成されます。

    これは素晴らしい。これらのアラートのいずれかがトリガーされるたびに、チームに電子メールが送信されます。はじめに述べたように、イベントアラートに加えて、アラートをパフォーマンス条件に合わせて構成できます。たとえば、メモリ使用量が定義されたしきい値を超えると、アラートがトリガーされる可能性があります。さまざまなパフォーマンスアラートを調べて、組織が恩恵を受ける可能性のあるアラートを作成することをお勧めします。 SQL Serverのパフォーマンス状態アラートを見つけるには、[新しいアラート]ダイアログボックスで、[タイプ]のドロップダウンボックスをクリックします。そこにSQLServerのパフォーマンス状態アラートが一覧表示されます。そのオプションを選択すると、パフォーマンス条件アラートを構成できるオブジェクトのタイプを参照できます。

    アラート応答にオペレーターを割り当てましたが、SQLエージェントジョブを実行するようにアラートを構成することもできます。これにより、イベント応答タスクを柔軟に実行できますが、条件付きアラートを簡単に実行することはできません。

    高度なアラートのためのSQLSentryの使用

    より高度なアラートを得るには、より優れたツールが必要です。これは、SQLSentryが役立つ場合があります。私のお気に入りのSQLSentryアラート機能の1つは、環境内で何かが変更されたときにアラートまたはアクションを実行するカスタム条件を作成する機能です。たとえば、誰かが最小または最大メモリ値を変更した場合、maxdopを変更した場合、または並列処理のコストしきい値を変更した場合、アラートを受け取ったり、プロセスを開始したりすることができます。この機能はSQLSentryv8で導入され、Greg Gonzalez(ブログ| @SQLsensei)は、「SQL Sentry v8:インテリジェントアラートの再定義」についてブログに書いています。

    この機能を使用すると、単一のアラート内でさまざまなデータベースのカスタム条件を作成することもできます。 SQL Agentアラートを使用してこれを試みた場合、データベースごとに異なるアラートを作成する必要があります。

    もう1つの優れたアラート機能は、さまざまなアラートスケジュールを作成する機能です。多くの組織には、1日のさまざまな時間帯に責任を持つチームがあります。一部の人は、昼間はネットワークオペレーションセンターが夜勤を担当し、週末はオンコールの担当者が本番DBAに責任を負います。アラートスケジュールをカスタマイズして、責任のある時間帯に適切なチームに通知できるのは素晴らしいことではないでしょうか?

    (時間枠のように)アラートウィンドウを作成し、それらを別のアラートまたはグループに関連付けることができます。これにより、さまざまなアラートをさまざまな時間にアクティブにし、さまざまなグループにさまざまな時間に通知することができます。アラートをサポートスケジュールに従わせることができるので、これは本当にクールです。正しい人に通知されます。 Scott Fallenは、ブログ投稿「SQL Sentryを使用した通話スケジュールの警告」でこの機能について詳しく説明し、さまざまなオンコールチーム向けのアラートの作成について説明しています。

    PerformanceAdvisorおよびEventManagerのもう1つのアラート機能は、Windowsプロセスの実行、データベースまたはエラーログへのイベントのログ記録、SCOMなどの別の監視ツールへのSNMPトラップの送信、プロセスの強制終了など、他の応答を構成する機能です。 。特定のイベントが発生したときに発生するように事前定義できることに関して、オプションはほぼ無制限です。 SQLエージェントアラートはそれほどカスタマイズ可能ではありません。

    概要

    この投稿からの重要なポイントは、エラーとパフォーマンス状態について絶対に警告する必要があるということです。 SQL Sentryなどのツールがない場合でも、SQLエージェントアラートを利用することは素晴らしいスタートです。

    次のいくつかの投稿では、パフォーマンスに影響を与えるこれらのアラートのいくつかについて詳しく説明し、アラートが発生したときに実行する必要のあるアクションについて説明します。


    1. SQLite Char()のしくみ

    2. SQLServerテーブルの列のIDプロパティを削除する方法-SQLServer/T-SQLチュートリアル44

    3. リンクサーバーでの疑似列の使用

    4. 数値としてのSQL順序文字列