Amazon RDS Performance Insights オンデマンド分析の活用

AWS

2023.8.25

Topics

はじめに

Performance Insights に、オンデマンドで分析できる機能が追加されました。
まだ、出たばかりの機能ということもありドキュメントやコンソール上で本機能の名称がバラバラなため、本記事では「オンデマンド分析」と定義しております。

Amazon RDS (Relational Database Service) Performance Insights は、お客様がデータベースのパフォーマンスメトリクスをオンデマンドで分析し、パフォーマンスの問題をトラブルシューティングできるようになりました。
機械学習モデルを活用して、選択した期間中のパフォーマンスのボトルネックを特定し、次に何をすべきかアドバイスを提供します。
Amazon RDS Performance Insights はオンデマンド分析エクスペリエンスを提供します

この機能を用いることで、機械学習を使用したデータベース負荷の分析がいつでも実施できるようになりました。
今までは、ユーザー自らがメトリクス等から負荷状況を推測して改善を行っていましたが、このオンデマンド分析を行うことで「どこ」を「どう」見ればいいのかをわかりやすく教えてくれます。

オンデマンド分析の制約

ドキュメント等に明確な記載が無いですが、検証する際に色々と制限があったため以下記載いたします。

  • Performance Insights の保存期間が 1 か月以上
  • 新規インスタンスを起動してから 24 時間たったインスタンスのみ
  • 使用できる DB エンジン:Aurora MySQL,Aurora PostgreSQL,RDS for PostgreSQL

Analyzing database performance for a period of time – Amazon Relational Database Service

上記の要件を満たせていない場合だと、Performance Insights の画面で「Analyze performance」ボタンと、「Performance analysis reports – 新規」タブが表示されません。

パフォーマンスインサイト要件を満たせている画面

また、「Analyze performance」ボタンがあっても分析することができない場合もあるためお気をつけください。

要件を満たせていない場合のエラーメッセージ

エラーメッセージは以下の通りです。

The analysis period must be more than 5 minutes and less than 144 hours (6 days), and the start time must be at least 24 hours after the beginning of your retention period
分析期間は 5 分以上 144 時間(6 日)未満とし、開始時刻は保存期間の開始から少なくとも 24 時間後とする。

エラーメッセージから起動したインスタンスの 24 時間以降のデータしかできないのかなと思いましたが、インスタンスを起動して 24 時間以降に、起動後 24 時間以内のデータを分析してもできました。
なので、新規起動したてのインスタンスでは本機能が使えない制限のようです。

オンデマンド分析の仕方

今回は mysqlslap を使って負荷をかけた環境に対して、新機能のオンデマンド分析を行ってみたいと思います。

準備

負荷をかける用に EC2(Amazon Linux2) を用意しましたが mysqlslap がインストールされていなかったので MySQL 8.0 をインストールするとついてきました。

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum install mysql-community-server -y

実行したコマンド
ある程度の負荷が与えられれば問題ないので適当なサンプルを実行しています。

mysqlslap \
 --no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
 --host=cold-airflow-aurora-peformance.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com --port=3306 -u root -ppassword\
 --number-int-cols=10 \
 --number-char-cols=10 \
 --iterations=10 \
 --concurrency=50 \
 --auto-generate-sql-write-number=1000 \
 --number-of-queries=1000 \
 --auto-generate-sql-load-type=read

実行結果

[root@ip-10-0-1-22 ~]# mysqlslap \
>  --no-defaults --auto-generate-sql --engine=innodb --auto-generate-sql-add-autoincrement \
>  --host=cold-airflow-aurora-peformance.cluster-co4nqylz6jpl.us-east-1.rds.amazonaws.com --port=3306 -u root -ppassword\
>  --number-int-cols=10 \
>  --number-char-cols=10 \
>  --iterations=10 \
>  --concurrency=50 \
>  --auto-generate-sql-write-number=1000 \
>  --number-of-queries=1000 \
>  --auto-generate-sql-load-type=read
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
        Running for engine innodb
        Average number of seconds to run all queries: 3.084 seconds
        Minimum number of seconds to run all queries: 2.994 seconds
        Maximum number of seconds to run all queries: 3.181 seconds
        Number of clients running queries: 50
        Average number of queries per client: 20

mysqlslap の詳細については以下をご覧ください。

第 23 回  mysqlslap を使って負荷テストをしてみよう | gihyo.jp
MySQL :: MySQL 8.0 リファレンスマニュアル :: 4.5.8 mysqlslap — ロードエミュレーションクライアント

オンデマンド分析を使ってレポートを作成

先程実行した負荷を分析してみます。

使い方はものすごく簡単で、Performance Insights の画面から「Analyze performance」を選択します。

Analyze performanceの選択画面

そうすると、分析する期間を選択できるモードに変わります。
グラフ上の選択で期間を設定することもできます。

分析範囲決定画面

もしくは、CloudWatch 等でおなじみの画面で入力することもできます。

時刻設定画面

あとは、任意でタグを指定することができます。
選択した内容で問題がなければ、「Analyze performance」を押すと分析が開始されます。

タグ設定画面

オンデマンド分析結果については、「Performance analysis reports – 新規」タブから確認することができます。

オンデマンド分析レポート

オンデマンド分析レポートの詳細確認

レポートを選択すると分析結果の詳細を見ることができます。
セクションは大きく以下 4 つに区分されます。

  • Overview
  • Database load insights
  • Related Metrics(出るときと出ない時がある)
  • Analysis and Recommendations(出るときと出ない時がある)

以降で、それぞれについて見ていきます。

Overview

ここでは、基本的な情報を確認することができます。

  • データベース
  • DB エンジン
  • レポート作成日時
  • 分析開始日時
  • 分析終了日時
  • 分析結果

オンデマンド分析レポートのOverviewの画面

Database load insights

ここでは、データベース分析のグラフと同じものを確認することができます。
また、簡単な評価が記載されています。

Low severity
DB load below vCPU for the time range. No performance issues detected.
↓ 翻訳
DB 負荷が時間範囲の vCPU を下回った。パフォーマンスの問題は検出されませんでした。

オンデマンド分析のDatabase load insightsの画面

Related Metrics

このセクションは負荷の大きさに応じてあったりなかったりするようです。

ここでは、実際にどのメトリクスやデータで問題があったかをそれぞれのグラフで表示してくれます。

今回検証した分析だと、3 つほど表示されてました。

  • Innodb Buffer Pool Read Request
  • Questions
  • Total Query Time

Related Metricsの「Innodb Buffer Pool Read Request」結果

Related Metricsの「Questions」と「Total Query Time」結果

これはすごく便利だなと思います。
どのメトリクスで判断できたかや、Normally や Anomaly でどれぐらい乖離していたのかを比較することができます。

あまりデータベースに詳しくない方でも、「ここを見ればいいよ」とポイントを提示してくれるため改善に繋げやすいと思います。

Analysis and Recommendations

このセクションも負荷の大きさに応じてあったりなかったりするようです。

ここでは、具体的にどうすればいいのか Next Action を教えてくれます。
見る限り DevOps Guru for RDS のレコメンド内容と同じ気がします。

Analysis and Recommendationsの結果画面

ちなみに、点線のところにカーソルを合わせるとより詳細な情報が表示されます。

Analysis and Recommendationsの詳細情報

おまけ

このアップデートと同じタイミングかは定かではないですが、他にも色々とアップデートがあったので軽くご紹介します。

データベース負荷 グラフの Table タイプ

前のダッシュボードのときは、データベース負荷グラフでは、2 つのタイプのグラフに変更することが可能でした。
アップデートによってこの機能がなくなってましたが、再度復活して「Table」が追加されていました。

データベース負荷グラフのテーブル結果

縦線と線だと実際どれぐらいの数値なのかが、カーソルを合わせないと見れなかったです。
今回追加された Table の場合は数値で表示されるので具体的にどれぐらいの値なのかをひと目で判断することができます。

時間範囲指定で「絶対的な範囲」が追加

今まで、「相対的な範囲」しか選択できず、「この時間帯が見たい」といったときは範囲をいい感じに指定していました。
それが、「絶対的な範囲」が追加されたことにより、ピンポイントで「この時間帯が見たい」が簡単に実現できるようになりました。

絶対的な範囲の設定画面

これは嬉しいアップデートですね。

パフォーマンススキーマの無効状態のお知らせ

MySQL 限定の案内ですが、パフォーマンススキーマが有効になっていないデータベースで Performance Insights を開くと一番上にお知らせしてくれるようになりました。
前までは、分析結果を見て情報量や内容が変わっていれば有効されていないという判断をしていましたが、それをお知らせしてくれるのですごくわかりやすくなりました。

パフォーマンススキーマの無効化お知らせ

まとめ

Performance Insights は、データ収集に強い機能でしたが、今回のアップデートで分析機能を備えたことで、これ一つでデータ収集から分析まで行うことが可能になりました。
データベースに詳しくない方でも、この機能を活用することでデータベースの負荷を簡単に分析改善することができます。

参考記事

Amazon RDS Performance Insights provides an on-demand analysis experience
Analyzing database performance for a period of time – Amazon Relational Database Service
mysqlslap による mysql ベンチマーク解説 – Qiita
MySQL :: MySQL 8.0 リファレンスマニュアル :: 4.5.8 mysqlslap — ロードエミュレーションクライアント

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら