SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Intelligent Insights を使用した SQL DB のパフォーマンス監視

one comment

SQL Database のパフォーマンス監視する方法として、メジャーなものとしては次のようなものがあるかと思います。

今の SQL Database には、これに加えて「Intelligent Insights」という機能が追加されています。

本投稿ではこの、Intelligent Insights についてまとめてみたいと思います。

■Intelligent Insights とは?


Intelligent Insights には次のように記載されています。

Intelligent Insights は、組み込まれているインテリジェンスを使って、人工知能によりデータベースの使用状況を継続的に監視し、パフォーマンス低下の原因となる破壊的なイベントを検出します。 検出されると、詳細な分析が実行され、問題のインテリジェントなアセスメントを含む診断ログが生成されます。 このアセスメントは、データベース パフォーマンスの問題の根本原因分析と、可能な場合にはパフォーマンス向上に関する推奨事項で構成されます。

私は、

  1. SQL DB の各種情報を取得し、
  2. インテリジェンス (人工知能による知性) を使用した分析を自動的に行い
  3. パフォーマンスの改善につながるインサイト (洞察) を得る

ことを目的とした機能が、「Intelligent Insights」ととらえています。

 

取得した情報の可視化としては、Log Analytics の Azure SQL Analytics (プレビュー) を使用した Azure SQL Database の監視 の Intelligent Insights レポートとして統合されている形でしょうか。

 

■使用するためには


設定の方法はポータルから簡単に実施することができ、情報を取得したい DB の「診断設定」から「診断をオンにする」から有効にすることができます。

image

 

■情報の取得先


情報の連携先としては、次の三種類を組み合わせて使用することができます。

Azure 標準のログ記録と連携する場合、ストレージやイベントハブを組み合わせる形でしょうか。

本投稿では、ストレージと Log Analytics を有効にして検証を実施しています。

 

■取得可能な情報


それでは、Intelligent Insights で取得される情報について整理してみたいと思います。

次の画像は、ポータルで選択できる取得内容の情報となっています。

image

取得される情報や、得られる洞察については次のドキュメントを見るとよいかと。

洞察の情報については取得された情報を元にして判断されているようですが、洞察のもとになるのは、次の情報になるかと。

取得されている情報を見ている限り、「洞察の部分以外」は、SQL DB の利用者が取得できる情報を組み合わせて使用しているようですので、プラットフォームベンダーだから取得できる特殊な情報というのはなさそうではありました。

 

ストレージに取得される情報

ストレージアカウントの場合、それぞれのログに対応したコンテナーが作成され、「insights」のプレフィックスが付与されているものが Intelligent Insights で取得されているものになるかと。

image

取得される情報の対応は次のようになっています。
(Audit がどこに取得されているかがわからなかったのですが、これはわかったら追記したいと思います)

ポータルの項目 ストレージコンテナー
QueryStoreRuntimeStatistics insights-logs-querystoreruntimestatistics
QueryStoreWaitStatistics insights-logs-querystorewaitstatistics
Errors insights-logs-errors
DatabaseWaitStatistics insights-logs-databasewaitstatistics
Timeouts insights-logs-timeouts
Blocks insights-logs-blocks
SQLInsights insights-logs-sqlinsights
Audit
AllMetrics insights-metrics-pt1m

 

ストレージ内には、JSON フォーマットのデータが、時間をディレクトリとして、DB 毎にデータが格納されます。

Log Analytics に取得される情報

Log Analytics に取得した場合は「AzureDiagnostics」の情報としてメトリック単位に取得されているようです。

image

Log Analytics を使用する場合は、OMS の「Azure SQL Analytics」から情報を取得することになるのが一般的かと思います。

image

次のようにダッシュボードが表示されますので、ここから Log Analytics で取得されている情報を確認することになります。

image

グラフをブレークダウンしていくと、どのような Azure Log Analytics Query Language が使用されているかを確認することができますので、自分で情報を整形したい場合には、これらの情報を活用するとよいかと。

image

 

■利用可能な情報


機能を利用することで取得可能な情報を整理してみたいと思います。
ストレージに取得されている情報が分類分けされていますので、これをベースにしてまとめてみます。

Intelligent Insights を使用した Azure SQL Database のパフォーマンスに関する問題のトラブルシューティング に書かれている情報を解析するために必要な情報が取得されています。

 

ブロッキング (ロック競合) の情報

拡張イベントで取得可能な Blocked Process Report の情報が取得されているかと。

SELECT * FROM sys.configurations WHERE name like 'blocked process threshold (s)'

で設定が取得できるのですが、現時点の SQL DB では、値が「20」に設定されています。

image

ロック競合が「20 秒以上」発生すると、ロック競合により処理が停止しているクエリの情報と、ブロッカーとなっているクエリの情報についてのイベントを取得することができます。

どのクエリが長時間ロックを取得していて、同時実行性を低下させる原因になっているかを確認することができます。

OMS では、次のような情報として確認することができます。

image

 

待ち事象の情報

DMV の待ち事象の情報が取得されているかと。

DMV の待ち事象の情報は累計値となっているのですが、連携されている情報については、5 分間隔で前回取得タイミングとの差分となっているようで、利用しやすい形で事前に加工された情報となっています。

すべての待ち事象を取得しているのではなく、主要な待ち事象の上位の情報となっていそうですが、システム全体の待ち事象の傾向を確認するためには有益な情報ですね。

OMS では、次のような情報として確認することができます。

image

 

クエリのエラー情報

拡張イベントで取得可能な  error_reported の情報がフィルタリングされて取得されているかと。

SQL Server Profiler でいう Exception イベント クラス に近い内容が取得されているのかとおもいます。

ロックタイムアウト / 無効なオブジェクトのアクセス / 0 除算の発生状況といったクエリのエラーを取得することができます。

OMS では、次のような情報として確認することができます。

image

 

クエリストアのランタイム統計情報

クエリストアのランタイム統計である sys.query_store_runtime_stats の情報が取得されているかと。

  • DOP
  • CPU 使用時間
  • 取得行数
  • クエリで取得されたメモリ
  • クエリ実行時間
  • 物理読み取り I/O
  • ログ書き込み

が高いクエリの情報を取得するための情報を取得することができます。

リソース使用状況や実行時間の高いクエリを取得することで、どのクエリをチューニング対象とするかの判断を実施することができますね。

OMS では、次のような情報として確認することができます。

image

 

クエリストアの待ち事象の情報

クエリストアの待機情報である sys.query_store_wait_stats の情報が取得されているかと。

クエリストア観点の待ち事象の情報は、カテゴリ単位でまとめれたものとなりますが、特定の待ち事象が発生する原因となっているクエリの調査を実施することができます。

OMS では、次のような情報として確認することができます。

image

 

クエリのタイムアウト情報

クエリストアの sys.query_store_runtime_stats の「execution_type = 3」または、拡張イベントの SQL:BatchCompleted イベント クラス の 「result <> 0」の情報が取得されているかと。

タイムアウトが発生したクエリの回数を取得することができます。

OMS では、次のような情報として確認することができます。

image

 

メトリックの情報

DMV の sys.resource_stats / sys.dm_db_resource_stats の情報が取得されているかと。

DTU の使用状況の情報は、

  • sys.resource_stats : 5 分間隔で 14 日間
  • sys.dm_db_resource_stats : 15 秒間隔で 1 時間

で取得されていますが、メトリックの情報としては 1 分間隔の情報が長期で取得されることになります。

OMS では、次のような情報として確認することができます。

image

 

洞察の情報

この情報については、単体の情報を取得しているというわけではなく、複合的に情報を解析しながら生成されているため、OMS で見た方が見やすいかと。

次の画像のように、洞察単位でどのようなイベントがあったかを確認することができます。

image

検出されるものは、データベースの検出可能なパフォーマンス パターン に記載されているものとなりそうですね。

 

取得元の情報についても記載してみましたが、自前で実装しようとした場合、SQL DB の情報の解析方法を理解しながら取得情報を取捨選択する必要があります。

Intelligent Insights については有効にすることで、SQL DB の各種情報を簡単に取得することができますので、有効に活用できるのではないでしょうか。

Written by masayuki.ozawa

2月 18th, 2018 at 4:26 pm

Posted in SQL Database

Tagged with

One Response to 'Intelligent Insights を使用した SQL DB のパフォーマンス監視'

Subscribe to comments with RSS or TrackBack to 'Intelligent Insights を使用した SQL DB のパフォーマンス監視'.

  1. […] Intelligent Insights を使用した SQL DB のパフォーマンス監視 […]

Leave a Reply

*