都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

sp_server_diagnostics を試してみた

 sp_server_diagnostics は、SQL Server 2012 から搭載されたシステムストアドプロシージャです。SQL Server の潜在的な障害を検出するために、診断データと正常性の情報をキャプチャすることができます。まだ、MSDN 上のドキュメントがアップデートされていないのか、結果セットが仕様と異なります。もう少ししたら、2014 のドキュメントがアップデートされると思います。動作確認してみましょう。下記のストアドプロシージャを実行していましょう。

exec sp_server_diagnostics

f:id:koogucc11:20140503103124p:plain

5 つのコンポーネントの説明は以下のとおりです。

  • system: システムの観点から、スピンロック、サーバー処理の条件、応答していないタスク、ページ フォールト、および CPU 使用率のデータを収集します。 この情報から、全体的な正常性状態の推奨設定が生成されます。
  • resource: リソースの観点から、物理メモリおよび仮想メモリ、バッファー プール、ページ、キャッシュおよびその他のメモリ オブジェクトのデータを収集します。 この情報から、全体的な正常性状態の推奨設定が生成されます。
  • query_processing: クエリ処理の観点から、ワーカー スレッド、タスク、待機の種類、CPU を集中的に使用するセッション、およびブロックしているタスクの情報を収集します。 この情報から、全体的な正常性状態の推奨設定が生成されます。
  • io_subsystem: IO のデータを収集します。 このコンポーネントは診断データのほかに、IO サブシステムのみについてクリーンまたは警告の正常性状態を生成します。
  • events: ストアド プロシージャを介して、サーバーによって記録されたエラーと対象イベント (リング バッファーの例外の詳細、メモリ ブローカーに関するリング バッファー イベント、メモリ不足、スケジューラ モニター、バッファー プール、スピンロック、セキュリティ、および接続を含む) のデータを収集して表示します。 イベント状態としては、常に 0 が表示されます。<name of the availability group>: 指定された可用性グループのデータを収集します (component_type = "alwaysOn:AvailabilityGroup" の場合)。

  always on も含めて、SQL Server 全体のヘルスチェックが可能ですね。まずはこのシステムストアドプロシージャでチェックを行って、何かしら異常が発生していれば( State_Desc あたりをチェックして )、動的管理ビュー、拡張イベント等でのチェックを行うといったところでしょうか。