SQL Database にはいくつかの診断情報の取得 / 可視化の方法がありますが、いろいろな方法があってよくわからなくなってきたのでまとめておこうかと。
SSMS によるクエリ実行による情報の取得
SQL Database の情報はポータルから確認することができますが、いくつかの情報については類似の情報が DMV からも確認することができます。
SQL Server の DMV を使用したことがあるのであれば、これらの情報を起点に情報の取得を行った方が早いこともあるのではないでしょうか。
DMV によるリソースの使用状況の取得
標準で次の DMV から情報を確認することができます。
- sys.resource_stats
- 5 分間隔の集計情報を 14 日間保持
- sys.dm_db_resource_stats
- 15 秒間隔で 1 時間保持
これらの情報から、リソースの使用状況を取得することができます。
基本的なリソースの使用状況 (CPU / メモリ / ディスク) であれば、これらの DMV を検索することで状況を確認できます。
上記の DMV は SQL Database 固有のものとなりますが、SQL Server でサポートしている DMV も多数サポートしていますので、SQL Server のスキルは SQL Database でも活用することができます。
クエリストアによる取得
クエリストア の導入以降に新規に作成された DB であれば、SQL Database についてはデフォルトでクエリストアが有効化されています。
SQL Database のクエリストアについては、Azure の Query Performance Insight と連携されるため、ポータルから透過的に使用したことがある方の方が多いかもしれないですね。
クエリ ストアを使用する際のベスト プラクティス に記載されていますが、SQL Database では次のような設定が既定値となっています。
(Box の SQL Server とは既定値が異なっており、軽量でとれるような設定が行われています)
クエリ (T-SQL) の調査を行う場合は、クエリストア用のシステムビューを直接確認し、加工をしながら分析をすることがありますので、GUI ではなく SQL でデータの確認ができるようになっていると、機能を強力に活用することができます。
拡張イベントによる取得
SQL Database では、SQL Server プロファイラーは使用できませんが、拡張イベントによるイベントベースの情報の取得を行うことは可能です。
(Managed Instance であれば、SQL Server プロファイラーによる接続も可能です)
SQL Database の場合、拡張イベントを永続化するためには、Azure ストレージ上にログファイルを保存する必要があります。
拡張イベントは「イベントの発生」したタイミングの情報を取得するものとなり、特定の事象が発生した場合に、イベントの情報をロギングすることができます。
イベントには多数の種類があり、情報の取得により、サーバーに負荷をかけるものもありますので、イベントの取捨選択は慎重に実施する必要がありますが、使いこなすことができるとトラブルシューティングの強力な武器となります。
ポータルによる稼働状況の確認
そもそもとして SQL Database のサービスや、DB が稼働しているかどう情報を確認するために活用できる機能となります。
稼働状況の基本的な確認方法としては、
- サービス正常性
- リソース正常性
の 2 種類があります。
サービス正常性
Azure のサービス自体に障害が発生しているかを確認するための手段が サービス正常性 (Service Health : サービス ヘルス) となります。
「全般」の「サービス正常性」からアクセスできるものですね。
Azure のサービスの稼働状況を確認することができます。
ポータルにアクセスしないで、Azure Status や twitter で状況を確認する方が多いかもしれませんが…。
「正常性アラート」からアラートルールが設定できますので、サービスに問題が発生している場合は、メール通知等を実施することができます。
リソース正常性
リソース正常性 (Resource Health : リソース ヘルス ) は、その名の通りリソースが正常に稼働しているかを確認するためのブレードとなります。
サービス正常性より、ミクロな観点で、自分が作成した Azure のリソースの状態について確認することができます。
SQL Database no稼働状況をこの情報から確認することができます。
私は検証のために DTU のサイズを頻繁に変更しているので、それに伴っていろいろと警告が上がっていますね。
サービス正常性については、ポータルからアラートルールを設定できましたが、リソース正常性のアラートについては、PowerShell ベースでの設定となるようです。
これは別途検証しようかと。
ポータルによる標準項目の確認
SQL Databse をデプロイすると標準的に取られているメトリックの情報となります。
リソースの使用状況などを確認する際に使用することができます。
Azure Monitor で取得されている標準メトリック
Azure Monitor で直近 30 日分のデータであれば標準メトリックとして取得されている情報から確認ができるかと。
ポータルの「概要」のブレードで表示される次のような情報や、「メトリック」のブレードで確認できる情報の元になっているものですね。
取得されている情報の内容については Azure SQL Database のメトリックと診断のロギング / Microsoft.Sql/servers/databases から確認できます。
標準で取得されている項目でアラートルールを作成することもできますので、基本的な監視にはこれらのメトリックを活用することもできます。
取得されているメトリックは「監視」の「ログ」から Kusto でデータの分析を行うこともできます。
私の環境では、SQL Database のリソースとしては次の 3 種類が取得されていますね。
- AzureActivity
- AzureDiagnostics
- AzureMetrics
取得されている標準メトリックをアドホックに分析したい場合には、これらの情報を活用することも可能です。
ログに含まれている情報がどのテーブルに含まれているかがいまいちわからないときは、とりあえず「search * 」で全体をターゲットして検索を行い、情報の確認をしてみてもよいかもしれません。
診断設定で情報を取得
標準メトリックで基本的な情報は取得されていますが、保持期間を増やすためや情報の活用効率を向上させたいような場合には「診断設定」から
- ストレージ アカウント
- イベント ハブ
- Log Analytics ワークスペース
に対して、別途メトリックや情報の送信を行うことができます。
診断設定では、次の情報を指定した送信先に保存することができます。
各項目の説明については Azure SQL Database のメトリックと診断のロギング に記載されています。
次の画面は、送信先の Loga Analytics ワークスペースですが、Azure Metrics が送信されてきているのが確認できますね。
![]()
一つの Log Analytics ワークスペースに複数の情報やカスタムメトリックの情報を統合して集約して分析を行うこともできるかと。
SQL Database の「監査」のログについても似たような形で転送することができます。
Log Analytics ワークスペースに SQL Database 向けのソリューションを追加
Log Analytics では「ワークスペースの概要」から情報の可視化を行うことも可能です。
「監査」を Log Analytics に送信している場合、監査用のソリューション (Microsoft Azure SQL Database – Security Insights and Access to Sensitive Data) が追加されている状態になっているかと思います。
Log Analytics ワークスペースでは、ソリューションを追加することで取得されている情報の可視化の利便性が向上します。
ソリューションのブレードについては「管理+ガバナンス」から表示することができます。
監査の情報を連携するようにすると Microsoft Azure SQL Database – Security Insights and Access to Sensitive Data というソリューションが追加され、ワークスペースの概要からではなく、ソリューションからログを確認することもできます。
Azure SQL Analytics (a.k.a. Intelligent Insights)
SQL Database 向けのソリューションとしては、「Azure SQL Analytics」も利用することができます。
![]()
個のソリューションを SQL Database の診断データを連携している Log Analytics ワークスペースに追加すると SQL Analytics の情報を確認することができるようになります。
このソリューションを使用することで、SQL Database の診断設定で取得されてる各種情報によるダッシュボードを表示することができます。
この機能は、Intelligent Insights として解説されていることもありますのでこちらの情報も確認しておくと良いのではないでしょうか。
ポータルからクエリ情報の取得
Azure ポータルではメトリックだけでなくクエリの情報を確認することもできます。
Query Performance Insight
DB のクエリストアの機能を有効にしている場合、クエリの情報をポータルから Query Performance Insights として取得することができます。
基本的な情報としてはクエリストアと同様ですが、DB に接続できない状態でも、クエリ情報を確認することができますので、こちらの方が汎用性は高いかもしれませんね。
標準的な方法としてはこのようなものが使用できる感じでしょうかね。