[アップデート] Amazon RDS の Performance Insights で SQL Server でも SQL 統計機能が使えるようになりました

[アップデート] Amazon RDS の Performance Insights で SQL Server でも SQL 統計機能が使えるようになりました

Clock Icon2023.09.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon RDS では Performance Insights という機能を使うことで、データベースのパフォーマンスの調査をしたりボトルネックの特定を行うことが出来ます。

現在 Amazon RDS では様々なデータベースエンジンがサポートされており、その全てで Performance Insights を使うことが出来ますが、実は DB エンジンなどによって微妙に使える機能に差があります。

例えば本日時点では、実行計画の分析機能については Oracle でのみサポートされており、一定期間のパフォーマンス分析機能については PostgreSQL でのみサポートされていたりします。

この他に、Performance Insights には SQL 統計という機能があり、ステートメントレベルとダイジェストクエリレベルで、クエリに関する統計メトリクスを確認することが出来ます。

この SQL 統計ですが先日までは Microsoft SQL Server のみサポートされていませんでしたが、本日 Microsoft SQL Server でも利用可能になったというアップデートアナウンスがありました。

本日は実際に RDS for SQL Server 環境で確認してみましたので紹介します。

SQL 統計の使い方

SQL 統計の表示方法ですが、次のドキュメントに記載されています。

手順としては簡単で、Performance Insights のトップ SQL タブの設定ボタンで追加で表示したいメトリクスを選択出来るのですが、ここで統計メトリクスも表示対象にすることが出来ます。
デフォルトでは表示対象になっていないので必要なメトリクスを個別に表示設定する必要があります。

RDS for SQL Server で使ってみる

Performance Insights を表示して、ディメンションタブ内のトップ SQL タブを表示します。
いくつかの上位の SQL ステートメントが表示されています。

トップ SQL タブ内で設定ボタンを押します。右上の歯車のアイコンです。

ずらっと表示・非表示を設定出来るメトリクスが表示されますね。
私が確認した時がデフォルトだったと思いますが、サポート ID 以下はすべて OFF になっていました。
ここではすべてを ON にしてみました。

ID

ID 値はステートメントレベルかダイジェストレベルかで表示される内容が異なっていました。

ステートメントレベルの場合はsql_handleを、ダイジェストレベルの場合はquery_hashが表示されているようですね。(参考:SQL statistics for SQL Server - Amazon Relational Database Service

sql_handleはクエリが含まれているバッチまたはストアド プロシージャを一意に識別するトークンで、query_hashはクエリで計算され、同様のロジックを持つクエリを識別するために使用される、バイナリのハッシュ値です。

ダイジェストレベルではリテラル値のみ異なるクエリを集約しているのでquery_hashを使っているようですね。知らなかった。

統計メトリクス

統計メトリクスはいくつか種類がありますが、単位を見てみると大きくは時間あたりと実行あたりのメトリクスが存在しています。

あまり確認の意味はありませんが以下では全てを表示したものです。

本日時点で表示可能なメトリクスは以下です。

  • Executions/sec
  • Total elapsed time
  • Rows processed/sec
  • Logical reads/sec
  • Logical writes/sec
  • Physical reads/sec
  • Cpu time (ms)/sec
  • Total elapsed time/exec
  • Rows processed/exec
  • Logical reads/exec
  • Logical writes/exec
  • Physical reads/exec
  • Cpu time (ms)/exec

例えば、Cpu time (ms)/secであればクエリレベルの場合はdb.sql.stats.total_worker_time_per_secを使っていて、ダイジェストレベルであればdb.sql_tokenized.stats.total_worker_time_per_secを使っています。
各メトリクスの対応表は以下の公式ドキュメントもご確認ください。

さいごに

本日は Amazon RDS の Performance Insights で SQL Server でも SQL 統計機能が使えるようになったので確認してみました。

全てに RDS for SQL Server を使われている方はぜひ使ってみてください。
また、このあたりのドキュメント見ていると DB エンジンごとにどの数値を観察したら良いのか、調査を行う時のポイントみたいなものも見えるので良いですね。
個人的には、これまで SQL 統計機能をあまり活用出来ていなかったので活用していきたいと思いました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.