DataBase  /  Amazon Aurora  /  レポート取得ガイド

Amazon Aurora — Performance Insights による取得とセクション定義

Performance Insights は Aurora 専用のパフォーマンス分析サービスです。 DB ロード(AAS)の時系列グラフ・待機イベント分析・トップ SQL の識別を通じて、 Oracle AWR の Top 5 Timed Events・SQL Statistics に相当する情報をリアルタイムかつ過去に遡って取得できます。 本記事では各セクションの定義と AWS CLI・API を使った取得方法を解説します。

1. Performance Insights の概要と有効化

Performance Insights は Aurora インスタンスに軽量エージェントを組み込み、データベースの負荷を DB ロード(Average Active Sessions: AAS)という指標で1秒粒度で収集します。 無料期間は7日間、それ以降は有料で最大2年間のデータを保持できます。

有効化手順(AWS マネジメントコンソール)

RDS コンソール → インスタンス選択 → 「変更」→「Performance Insights を有効にする」にチェック → 保存期間とマスターキー(KMS)を設定して適用します。 新規クラスター作成時は「Performance Insights を有効化」がデフォルトで ON です。

有効化手順(AWS CLI)

AWS CLI
# Performance Insights を有効化して保持期間を 731 日(2年)に設定
aws rds modify-db-instance \
  --db-instance-identifier my-aurora-instance \
  --enable-performance-insights \
  --performance-insights-retention-period 731 \
  --apply-immediately
💡 Oracle AWR との対応
Performance Insights の DB ロード(AAS)は Oracle AWR の DB Time に相当します。 DB ロードが vCPU 数を超えていると CPU ボトルネック、以下でも高いと待機イベントによる競合が疑われます。

2. セクション定義:DB ロード(AAS)

AWR対応 DB Time / Elapsed Time

DB ロードは「特定の時間帯に実際にアクティブだったセッション数の平均」です。 値が vCPU 数を超えると処理が飽和していることを示します。

項目名説明AWR 対応項目
DBLoad 期間中の平均アクティブセッション数(AAS)。待機イベント別にスタック表示される。 DB Time / vCPU
DBLoadCPU CPU 上でアクティブだったセッションの平均数。IO 待ちなどを除いた純粋な CPU 使用。 CPU Time in DB Time
DBLoadNonCPU 待機イベントで待機していたセッションの平均数。DBLoad から DBLoadCPU を引いた値。 Non-CPU Wait Time

CloudWatch メトリクスとして取得

AWS CLI
# DBLoad メトリクスを直近1時間で取得(1分粒度)
aws cloudwatch get-metric-statistics \
  --namespace AWS/RDS \
  --metric-name DBLoad \
  --dimensions Name=DBInstanceIdentifier,Value=my-aurora-instance \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 60 \
  --statistics Average

3. セクション定義:待機イベント分析

AWR対応 Top 5 Timed Events / Wait Class Summary

Performance Insights ダッシュボードの「スライスの基準:待機」を選択すると、 DB ロードを待機イベント別に分解したスタックグラフが表示されます。 Oracle AWR の「Top 5 Timed Events」に相当します。

待機カテゴリ代表的な待機イベント(Aurora MySQL)Oracle AWR 対応
CPU CPU CPU Time
I/O 待ち io/aurora_redo_log_flushio/file/innodb/innodb_data_file log file sync / db file sequential read
ロック待ち wait/lock/table/sql/handlersynch/rwlock/innodb/dict_table_stats enq: TX - row lock contention
ネットワーク wait/io/socket/sql/client_connection SQL*Net message from client
コミット待ち wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond log file sync

Performance Insights API で待機イベントを取得

AWS CLI
# Performance Insights API でリソースメトリクスを取得
# ResourceARN は RDS インスタンスの ARN を指定
aws pi get-resource-metrics \
  --service-type RDS \
  --identifier db:INSTANCE_ID \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period-in-seconds 60 \
  --metric-queries '[
    {
      "Metric": "db.load.avg",
      "GroupBy": {
        "Group": "db.wait_event",
        "Dimensions": ["db.wait_event.name", "db.wait_event.type"],
        "Limit": 10
      }
    }
  ]'

4. セクション定義:トップ SQL

AWR対応 SQL Statistics(Elapsed Time / CPU Time 順)

Performance Insights ダッシュボードの「スライスの基準:SQL」を選択すると、 DB ロードへの寄与が大きい SQL が上位表示されます。 Oracle AWR の「SQL ordered by Elapsed Time」に相当します。

項目名説明AWR 対応項目
db.sql.statement SQL テキスト(デフォルト1,024文字まで。完全テキストは詳細画面で確認) SQL Text
db.load.avg 当該 SQL の平均 DB ロード(AAS)への寄与。選択期間の平均値。 Elapsed Time / DB Time 寄与率
db.sql.calls 期間内の実行回数 Executions
db.sql.avg_latency_per_call 1回あたりの平均実行時間(ミリ秒) Elapsed Time / Executions
db.sql_tokenized.id トークン化(リテラル値を ? に置換)した SQL のダイジェスト ID SQL ID

API でトップ SQL を取得

AWS CLI
# DB ロードへの寄与が大きい上位 SQL を取得
aws pi get-resource-metrics \
  --service-type RDS \
  --identifier db:INSTANCE_ID \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period-in-seconds 3600 \
  --metric-queries '[
    {
      "Metric": "db.load.avg",
      "GroupBy": {
        "Group": "db.sql_tokenized",
        "Dimensions": ["db.sql_tokenized.statement"],
        "Limit": 20
      }
    }
  ]'
SQL 詳細の取得
describe-dimension-keys API を使うと、特定の SQL ダイジェスト ID に対して 実行ユーザー・ホスト・待機イベント内訳などを追加で取得できます。

5. セクション定義:ディメンション分析(ユーザー・ホスト)

AWR対応 SQL Statistics(By User / By Module)

Performance Insights では DB ロードを「ユーザー」「ホスト」「データベース」「アプリケーション」 などのディメンション別に分解できます。特定のアプリケーションやバッチ処理が高負荷の原因かを特定するのに有効です。

ディメンション説明AWR 対応項目
db.user DB ユーザー別の DB ロード寄与 SQL ordered by User / Wait by User
db.host 接続元ホスト(IP アドレス)別の DB ロード寄与 SQL ordered by Module(接続元情報)
db.application アプリケーション名別(Aurora PostgreSQL でアプリ名を設定した場合) SQL ordered by Module
db.name データベース(スキーマ)名別の DB ロード寄与 —(インスタンス全体で集計するため)

6. AWS CLI / API による取得

describe-dimension-keys — 上位ディメンションをリスト取得

AWS CLI
# 上位待機イベントと各イベントの DB ロード比率を取得
aws pi describe-dimension-keys \
  --service-type RDS \
  --identifier db:INSTANCE_ID \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --metric db.load.avg \
  --group-by '{"Group":"db.wait_event","Limit":10}' \
  --period-in-seconds 3600

Python SDK(boto3)による取得例

Python(boto3)
import boto3
from datetime import datetime, timedelta, timezone

pi = boto3.client('pi', region_name='ap-northeast-1')

end_time = datetime.now(timezone.utc)
start_time = end_time - timedelta(hours=1)

# トップ SQL(DB ロード寄与順)
response = pi.get_resource_metrics(
    ServiceType='RDS',
    Identifier='db:INSTANCE_ID',
    StartTime=start_time,
    EndTime=end_time,
    PeriodInSeconds=3600,
    MetricQueries=[
        {
            'Metric': 'db.load.avg',
            'GroupBy': {
                'Group': 'db.sql_tokenized',
                'Dimensions': ['db.sql_tokenized.statement'],
                'Limit': 20
            }
        }
    ]
)

for key in response['MetricList'][0].get('Keys', []):
    sql_text = key['Dimensions'].get('db.sql_tokenized.statement', '')
    load = key['DataPoints'][0]['Value'] if key['DataPoints'] else 0
    print(f"Load: {load:.4f}  SQL: {sql_text[:80]}")
⚠️ IAM 権限の確認
Performance Insights API を使用するには pi:DescribeDimensionKeyspi:GetResourceMetrics 権限が必要です。マネージドポリシー AmazonRDSFullAccess または AmazonRDSReadOnlyAccess で付与されています。

7. セクション定義まとめ

セクション主な取得情報Oracle AWR 対応取得方法
DB ロード(AAS) DBLoad・DBLoadCPU・DBLoadNonCPU DB Time CloudWatch / PI API
待機イベント分析 待機イベント名・タイプ・ロード寄与 Top 5 Timed Events PI ダッシュボード / get-resource-metrics
トップ SQL SQL テキスト・実行回数・平均レイテンシ・ロード寄与 SQL Statistics PI ダッシュボード / get-resource-metrics
ディメンション分析 ユーザー・ホスト・DB 名別ロード SQL by User / Module describe-dimension-keys