【小ネタ】RDS DBインスタンスで Performance Insights が有効になっているか棚卸しする
RDS Performance Insights はデータベースのパフォーマンス分析に役立つダッシュボードを提供する機能です。 負荷がかかっているクエリの発見などに役立ちます。
以下の範囲で無料利用できます。
- 7日間分のパフォーマンスデータ履歴
- 1か月あたり 100 万件のリクエスト
無料枠だけでも十分トラブルシューティングに役に立ちます。 そのため、管理者としては Performance Insights を有効化することを標準として推奨していきたいです。
現状把握のために「 Performance Insights が有効になっていないRDS DBインスタンス 」を 洗い出したい要件が出てきたので、本ブログにて洗い出しの手順をまとめてみます。
前提: Performance Insights のサポート範囲
「Performance Insights をそもそも利用できるかどうか」 については、以下リンクあたりにまとまっています。
概要 | 参考リンク |
---|---|
RDS > インスタンスクラスに関する制限 | Amazon RDS DB エンジンとインスタンスクラスでサポートされている Performance Insights - Amazon Relational Database Service |
RDS > リージョンやエンジンバージョンの制限 | Amazon RDS の Performance Insights でサポートされているリージョンと DB エンジン - Amazon Relational Database Service |
Aurora > インスタンスクラスに関する制限 | Amazon Aurora DB エンジンとインスタンスクラスでサポートされている Performance Insights - Amazon Aurora |
Aurora > リージョンやエンジンバージョンの制限 | Performance Insights でサポートされているリージョンと Aurora DB エンジン - Amazon Aurora |
簡単にまとめると以下のような感じです(2025/01/29時点)。
- RDS
- MariaDB:
db.[t2|t3|t4g].[micro|small]
は未サポート - MySQL:
db.[t2|t3|t4g].[micro|small]
は未サポート - RDS for Db2 は未サポート
- MariaDB:
- Aurora
- Aurora MySQL:
db.[t2|t3]
およびdb.t4g.[micro|small]
は未サポート - Aurora MySQL: 並列クエリがオンのとき、制限あり (詳細)
- Aurora Serverless v1 は未サポート
- Aurora MySQL:
Performance Insights が有効になっているか棚卸しする
棚卸しには AWS CLI を使います。 以下スクリプトを作成しました。
#!/bin/bash
query="DBInstances[].\
{ DBInstance: DBInstanceIdentifier,\
Engine: Engine,\
EngineVersion: EngineVersion,\
InstanceClass: DBInstanceClass\
PIEnabled: PerformanceInsightsEnabled,\
PIRetentionPeriod: PerformanceInsightsRetentionPeriod,\
}"
aws rds describe-db-instances --query "${query}" --output table
出力される列は以下のとおりです。
列名 | 説明 |
---|---|
DBInstance | RDS DBインスタンスのID |
Engine | RDS DBインスタンスのエンジン |
EngineVersion | RDS DBインスタンスのエンジンバージョン |
InstanceClass | RDS DBインスタンスのインスタンスクラス |
PIEnabled | Performance Insights が有効になっているかどうか (True or False) |
PIRetentionPeriod | (Performance Insights が有効の場合) 保持期間の日数 |
実行サンプル
以下に実行サンプルを記載します。
./inventory-rds-performance-insights-settings.sh
# ---------------------------------------------------------------------------------------------------------------------------
# | DescribeDBInstances |
# +-------------------------+---------------+--------------------------+----------------+-------------+---------------------+
# | DBInstance | Engine | EngineVersion | InstanceClass | PIEnabled | PIRetentionPeriod |
# +-------------------------+---------------+--------------------------+----------------+-------------+---------------------+
# | aaa-dev | mysql | 8.0.35 | db.t3.small | False | None |
# | bbb-dev | mysql | 8.0.35 | db.t3.micro | False | None |
# | ddd-dev-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.xlarge | False | None |
# | ddd-stg-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.xlarge | False | None |
# | iii-stg-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.large | False | None |
# | iii-stg-aurora-reader | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.large | True | 7 |
# | mmmmm-stg | mysql | 8.0.36 | db.t3.medium | True | 7 |
# | sssss-stg | mysql | 8.0.37 | db.t4g.large | False | None |
# +-------------------------+---------------+--------------------------+----------------+-------------+---------------------+
以下は実行結果をMarkdownテーブルに整形したものです。
DBInstance | Engine | EngineVersion | InstanceClass | PIEnabled | PIRetentionPeriod |
---|---|---|---|---|---|
aaa-dev | mysql | 8.0.37 | db.t3.small | False | None |
bbb-dev | mysql | 8.0.37 | db.t3.micro | False | None |
ddd-dev-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.xlarge | False | None |
ddd-stg-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.xlarge | False | None |
iii-stg-aurora | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.large | False | None |
iii-stg-aurora-reader | aurora-mysql | 8.0.mysql_aurora.3.07.1 | db.r5.large | True | 7 |
mmmmm-stg | mysql | 8.0.36 | db.t3.medium | True | 7 |
sssss-stg | mysql | 8.0.37 | db.t4g.large | False | None |
この出力から Performance Insights が有効になっていないものについて、 有効にするようにPushしていきたいですね。
※ なお、前提で話したとおり そもそも Performance Insights が未サポートのものは除外する必要があります。
- RDS
- MariaDB:
db.[t2|t3|t4g].[micro|small]
は未サポート- MySQL:
db.[t2|t3|t4g].[micro|small]
は未サポート- RDS for Db2 は未サポート
- Aurora
- Aurora MySQL:
db.[t2|t3]
およびdb.t4g.[micro|small]
は未サポート- Aurora MySQL: 並列クエリがオンのとき、制限あり (詳細)
- Aurora Serverless v1 は未サポート
おわりに
RDSのPerformance Insights設定有無を棚卸ししてみました。 欲を言えば Security Hub あたりで Performance Insights 設定有無を チェックできるコントロールがあると嬉しいなと感じています。
以上、参考になれば幸いです。
参考
- データベースの負荷とは?RDS Performance Insights の使い方動画のご紹介と負荷対策のヒント | DevelopersIO
- Amazon RDS DB エンジンとインスタンスクラスでサポートされている Performance Insights - Amazon Relational Database Service
- Amazon RDS の Performance Insights でサポートされているリージョンと DB エンジン - Amazon Relational Database Service
- Amazon Aurora DB エンジンとインスタンスクラスでサポートされている Performance Insights - Amazon Aurora
- Performance Insights でサポートされているリージョンと Aurora DB エンジン - Amazon Aurora
- describe-db-instances — AWS CLI 2.23.8 Command Reference