SE の雑記

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

Datadog の Database Monitoring で SQL Server サポートが使用できたので試してみました

leave a comment

Dash 2021: Datadog の最新発表 でアナウンスされました データベース モニタリング の SQL Server の Beta でのサポートですが、先日、Datadog を確認したら、私のアカウントでも使用できるようになっていましたので試してみました。

SQL Server の Database Monitroing

Datadog を使用した SQL Server / Azure SQL Database のモニタリングについては、従来からパフォーマンス関連の情報の取得がサポートされていました。

SQL Server については、Agent をインストールした環境から SQL Server の Config を使用して、SQL Server にアクセスして、情報を取得、Azure SQL Database であれば、インテグレーション経由 (ケースによっては、Agent 経由で取得することもあると思いますが) でパフォーマンスに関しての各種メトリクスの取得を行い、パフォーマンスの可視化を行うことができます。

この従来からの機能に加えて、Agent 経由での情報取得につては、Database Monitoring として「クエリ情報」の取得を行うことができます。

Database Monitoring については、次の情報で解説が行われています。

Postgres / MySQL については、以前から機能が提供されていましたが、SQL Server については、Private Beta となっており、一般公開がされていませんでした。

その後、どうなったかを先日確認してみたところ、Private Beta に登録していなくても SQL Server の Database Monitroing を使用することができるようになっていました。

image

 

サポートされる環境

サポートされている SQL Server については、SQL Server の設定 に記載されており、次のようになっています。

image

セルフインストールタイプの SQL Server の他に、各クラウドで提供されている PaaS の SQL Server ベースの環境もサポートがされています。

前段で記載していますが、PaaS の環境の情報取得は、Agent 経由でのアクセスとなるため、基本的な Agent の利用方法 に記載されている何らかの方法でエージェントが動作する環境を用意する必要があります。

私の場合、PaaS は Azure がメインとなるのですが、Azure の場合は、Setting Up Database Monitoring for Azure SQL Server に記載されている次の環境の情報を取得することができます。

  • Azure SQL Database
  • Azure SQL Managed Instance
  • SQL Server on Windows Azure VM

これらの環境に対しては、Grant the Agent access に記載されているログインを作成して、Agent から接続することで情報を取得することができます。

接続情報は Config に設定する必要があり、コンフィグのサンプルについては上述の情報や、conf.yaml.example のサンプルから確認することができます。

SQL Server の Database Monitroing 向けの構成があるのではなく、SQL Server のメトリクス情報取得を設定すると自動的に Database Monitoring の情報も取得されるようです。

 

取得される情報と仕組み

Database Monitoring で取得される情報については、次の情報で公開されています。

実際に Azure SQL Database を対象として取得した情報がこちらになります。

image

Database Monitoring の情報については「APM -> Databases」から確認することができます。

クエリのテキスト / 実行プランの XML 内のパラメーターについては正規化され、パラメーターは「?」に置き換えられて情報の収集が行われています。これにより、同一クエリとして集約するための柔軟性や PII 情報の秘匿につながるかと思います。

 

情報取得の仕組み

情報の取得の仕組みとしては「定期的に DMV から情報を取得する」(10 秒ぐらいの間隔?) ことで実現されているようで、大きく分けて次の 3 つの情報をベースとしているようです。

  • sys.dm_exec_requests から実行中のクエリ (status !=’sleeping’) を全件取得
  • sys.dm_exec_query_stats から last_execution_time が指定した秒数より前の、キャッシュされたクエリの情報を上位 10,000 件を取得
  • sys.dm_exec_query_plan から指定された Plan Handle の実行プランを取得

実行中のクエリとキャッシュされたクエリを定期的に取得し、情報を組み合わせることで Database Monitoring のデータが生成されているようです。

どのようなクエリが実際に実行されているかについては https://github.com/MasayukiOzawa/SQLServer-Util/tree/master/Datadog%20Database%20Monitor を参考にしていただければと思います。

Datadog のポータルから確認できる各項目の意味についても実際に実行されているクエリを確認することでイメージができるかと。

Share

Written by Masayuki.Ozawa

5月 5th, 2022 at 8:27 pm

Leave a Reply