Aurora DSQL Database Insights を使用した Aurora DSQL クラスターのモニタリング
Aurora DSQL Database Insights は、クラスター上のすべてのアクティブセッションについて、1 秒ごとにサンプリングされたデータへのアクセスを提供します。このデータは、各セッションの待機状態と正規化された SQL ステートメントを記録する DSQL Active Session History (DASH) サンプラーによって収集されます。DASH からの 1 分ごとの集計結果は、CloudWatch OpenTelemetry (OTel) メトリクスとして公開されます。このデータを使用して、データベースの負荷の把握、最もリソースを消費しているクエリの特定、パフォーマンス問題の診断を行うことができます。
DASH をセットアップする必要はありません。この機能はすべての Aurora DSQL クラスターで自動的に有効になります。1 分ごとの集計データが Amazon CloudWatch Database Insights を通じて、さらに CloudWatch OTel メトリクスに対して実行される Prometheus Query Language (PromQL) クエリを通じて、追加料金なしで利用できます。
DASH とは
アクティブセッションとは、オープントランザクションを持つクラスターへの単一の接続を表します。どの時点においても、各アクティブセッションの状態は次の 3 つのいずれかになります。
-
CPU を使用している
-
ストレージの読み取りやコミットの確認応答など、外部オペレーションの完了を待機している
-
トランザクション内でアイドル状態。オープントランザクションでアプリケーションからの次のステートメントを待機している
DASH は、オープントランザクションがあるセッションのみを追跡します。DASH は、クラスター上のすべてのアクティブなセッションを 1 秒に 1 回サンプリングすることで、このアクティビティをキャプチャします。各サンプルは次の 2 点を記録します。
-
待機イベント – サンプリング時点のセッションの状態。待機イベントの詳細なリストについては、「DASH の待機イベント」を参照してください。
-
SQL ステートメント – セッションで実行されていた SQL の最初の 256 文字。ほとんどのクエリを識別するのに十分な長さです。
DASH は、これらの 1 秒ごとのサンプルを集約し、待機イベントおよび SQL ステートメント別に分類して、1 分に 1 回 CloudWatch に発行します。その結果、各サンプル期間におけるアクティブなセッションの平均数を記録する 1 つの時系列メトリクス db.active_sessions.avg が得られます。この値は、平均アクティブセッション (AAS) とも呼ばれます。
AAS は、Aurora DSQL パフォーマンス分析の基本的なシグナルです。待機イベントの内訳は、クラスターのビジー状態だけでなく、セッションが何に時間を費やしているかを示します。SQL の内訳は、負荷の原因を個々のクエリに帰属させて解明します。
ヒント
Aurora DSQL は CPU を伸縮自在にスケールするため、最も有用な診断シグナルは、固定 vCPU の上限に対する AAS ではなく、待機プロファイルの形状 (待機イベント間のセッション時間の比例分布) です。その形状を、通常のオペレーション中に観測したベースラインと比較します。これらの比率の変化は、ワークロードまたはシステム動作の変化を示します。
DASH のメトリクスと待機イベント
DASH は、待機イベントと SQL ステートメントごとにデータベース負荷を切り分けるディメンションを含む単一のメトリクスを公開します。次の表は、DASH メトリクスについて説明しています。
| メトリクス | 単位 | 説明 |
|---|---|---|
db.active_sessions.avg |
Count | The average number of active sessions on the cluster over the sample period (AAS). Each active session is either running on CPU or in a named wait state. |
メトリクスには、データのグループ化とフィルタリングに使用する以下のディメンション (ラベル) が含まれています。
| ディメンション | 説明 |
|---|---|
db.wait.class |
The broader classification of wait events to identify the general type of resource
contributing to the database load. For example, class:oncpu means the
statement is actively running on the CPU, and class:io means that the
statement is waiting for an input/output operation to complete. |
db.wait.event |
The wait state the sampled sessions were in. See DASH の待機イベント for the full list of values. |
db.session.state |
The session state – アクティブ (executing a statement) or トランザクション内でアイドル状態 (waiting for the next command from the application while the
transaction remains open). |
db.query.id |
The fingerprint of the normalized SQL text of the statement the sessions were running. |
db.query.normalized_text |
The normalized SQL text of the statement the sessions were running. DASH removes literal values so that it groups statements that differ only in their parameters. |
aws.auroradsql.session.role.arn |
The IAM role ARN assumed to connect to the Aurora DSQL cluster. |
application.name |
The application name that you set in connection parameters. You can override it at connect time. DASH includes this dimension only when you explicitly set it. |
DASH の待機イベント
Aurora DSQL セッションでは、以下の待機イベントが発生する可能性があります。ストレージ関連の待機イベント (SequentialScanRead、ScatteredBatchRead、SingleRead、UniqueConstraintCheck、FkExistenceCheck) は、クエリ処理レイヤーとストレージレイヤー間の通信を表し、Commit はコミットサービスとの通信を表します。Aurora DSQL が新しい待機イベントを識別すると、このリストは今後拡大する可能性があります。
| 待機イベント | 待機クラス | 説明 |
|---|---|---|
OnCpu |
class:oncpu |
The session isn't waiting for external input and is actively executing on CPU – parsing, planning, evaluating expressions, or processing results. |
ClientRead |
class:client |
The session is idle within an open transaction, waiting for the application to send
the next SQL statement or a commit/rollback command. Frequent or long
ClientRead waits often indicate excessive application round-trips or
transactions that you hold open longer than necessary. |
ClientWrite |
class:client |
The database sends results to the application over the network. High
ClientWrite can indicate large result sets or network latency between the
application and the database. |
SequentialScanRead |
class:io |
The session is reading a contiguous range of keys from storage. This isn't necessarily a full table scan – it might cover a relatively small range of contiguous keys. |
ScatteredBatchRead |
class:io |
The session is performing batched reads from storage, retrieving multiple non-contiguous keys in a single call to storage. |
SingleRead |
class:io |
The session is reading a single tuple (point lookup) from storage.
ScatteredBatchRead with a batch size of 1 largely replaces this event, which
is uncommon in current Aurora DSQL versions. |
UniqueConstraintCheck |
class:io |
The session is validating unique key constraints, which requires storage reads to check for duplicates. This applies to both unique constraints on non-primary-key columns and primary key constraints during the insertion of new rows. |
FkExistenceCheck |
class:io |
The session is validating that a referenced foreign key row exists, which requires reads to confirm the relationship. |
StartTransaction |
class:io |
The session is preparing for the distributed transaction to begin. |
コミット |
class:io |
The session has initiated a commit and is waiting for acknowledgment from the commit
service. The response is either a success or an abort (serialization error); a
コミット wait precedes both outcomes. |
PgSleep |
class:timeout |
The session is sleeping because the application explicitly called
pg_sleep(). This is an application-initiated wait, not a database-imposed
one. |
DASH データへのアクセス
DASH データには、次の 3 つの方法でアクセスできます。
-
Amazon CloudWatch Database Insights – データベースの負荷とトップ SQL を調べるための、厳選されたノーコードのユーザーインターフェイス (UI)。これは、ほとんどの調査の出発点となります。
-
PromQL – サードパーティーのモニタリングツールとの統合やインタラクティブな探索のために、基盤となる
db.active_sessions.avgメトリクスをプログラムでクエリします。 -
Aurora DSQL システム診断 AI スキル – 人工知能 (AI) を活用したヘルスチェックエージェント。DASH データを自動的に分析し、時間枠をまたいで待機イベントの分布を比較し、診断レポートを生成します。
これらのアクセスパスはすべて、同じ DASH データセットから読み取ります。
CloudWatch Database Insights の使用
Amazon CloudWatch Database Insights は、Aurora DSQL 固有の厳選されたダッシュボードを通じて DASH データを表示します。Aurora DSQL クラスターは Database Insights に自動的に表示されます。クラスターを作成してトランザクションを実行する以外に、セットアップは必要ありません。
Database Insights で DASH データを表示するには
-
CloudWatch コンソールを開き、左のナビゲーションペインで [Database Insights] を選択します。
-
[フリートの状態] ビューで、[データベースリソース] のリストから Aurora DSQL クラスターを見つけます。または、[データベースインスタンス] ページに直接移動し、左側のパネルからクラスターを選択することもできます。
-
[DB 識別子] を選択して、[データベースインスタンスダッシュボード] を開きます。
-
[DB 負荷] チャートを使用して、時間の経過に伴う平均アクティブセッション数を表示します。このグラフは積み上げ型の視覚化であり、色別の帯ごとに 1 つの待機イベントを表します。合計の高さはクラスターのビジー状態を示し、帯は各セッションが何に時間を費やしているかを示します。
-
[DB 負荷] チャートの [分類方法] コントロールを使用して、[待機イベント] と [SQL テキスト] を切り替えます。
-
[DB 負荷分析] セクションには、AAS への寄与度によってランク付けされた [上位の待機イベント] と [トップ SQL] 別の AAS が表示されます。
-
ページ上部の時間範囲ピッカーを使用して、報告されたスローダウンの期間など、特定のモニタリングウィンドウに焦点を当てます。
PromQL の使用
DASH はデータを CloudWatch メトリクス db.active_sessions.avg として公開します。これを CloudWatch Query Studio の PromQL でクエリできます。
以下の例は、Query Studio で動作します。アクティブなワークスペースで既に結果がユーザーのアカウントとリージョンに絞り込まれています。タイムピッカーで評価ウィンドウが切り替わります。メトリクス名にはドットが含まれているため、例では PromQL の引用符で囲まれた名前セレクタフォーム {"db.active_sessions.avg"} を使用しています。
注記
すべての例には、結果を 1 つのクラスターに絞り込むための @resource.aws.auroradsql.cluster_id ラベルフィルターが含まれています。cluster-id を実際のクラスター識別子に置き換えてください。クラスターが 1 つしかない場合は、このフィルターを省略するか、代わりに Query Studio の UI フィルターを使用できます。環境内のメトリクスで使用可能なすべてのラベルを確認するには、{"db.active_sessions.avg"} をシリーズクエリとして実行し、返された各シリーズのラベルセットを調べてください。
待機イベント別のデータベース負荷
待機イベント別にグループ化されたアクティブセッションの平均数を返します。Database Insights の [DB 負荷] チャートで利用できる AAS-by-wait-event ビューと同じですが、プログラムからアクセスできます。
avg by ("db.wait.event") ( { "db.active_sessions.avg", "@resource.aws.auroradsql.cluster_id"="cluster-id" } )
結果には個別の db.wait.event 値ごとに 1 つのシリーズがあり、それぞれがその待機状態の平均 AAS 寄与度を表しています。
平均アクティブセッション数によるトップ SQL
データベース負荷に対する平均寄与度で SQL ステートメントをランク付けします。これは、Database Insights の [トップ SQL] ビューに相当する PromQL です。
topk(5, avg by ("db.query.normalized_text") ( { "db.active_sessions.avg", "@resource.aws.auroradsql.cluster_id"="cluster-id" } ) )
負荷への寄与度別に上位の SQL ステートメントと待機イベントの組み合わせを表示するには、グループ化句に db.wait.event を追加します。すべての組み合わせが一括でランク付けされるため、結果には同じ寄与度の高いステートメントに対して複数の待機イベントが含まれる場合があります。
topk(5, avg by ("db.query.normalized_text", "db.wait.event") ( { "db.active_sessions.avg", "@resource.aws.auroradsql.cluster_id"="cluster-id" } ) )
最も多くのストレージ読み取りを実行している SQL ステートメント
ストレージ読み取り待機イベントに絞り込むことで、ストレージ読み取りオペレーションに最も多くの時間を費やしている上位 5 つの SQL ステートメントを返します。
topk(5, sum by ("db.query.normalized_text") ( { "db.active_sessions.avg", "db.wait.event"=~"S.*Read|.*Check", "@resource.aws.auroradsql.cluster_id"="cluster-id" } ) )
正規表現 S.*Read は、名前が S で始まり Read で終わるストレージ読み取りイベント (SequentialScanRead、ScatteredBatchRead、SingleRead) と一致します。パターンには .*Check が明示的に含まれます。UniqueConstraintCheck および FkExistenceCheck 待機イベントは最初のパターンと一致しませんが、ストレージ読み取り待機イベントでもあるためです。
Aurora DSQL システム診断 AI スキルの使用
Aurora DSQL システム診断 AI スキルは、DASH データの読み取り、時間枠間の待機イベントの分布の比較、および診断レポートの生成により、Aurora DSQL クラスターのヘルスチェック分析を自動化します。このスキルは、awslabs/agent-plugins
クラスターの状態を分析するには、次のようなプロンプトを発行します。
「Check the performance of my Aurora DSQL cluster cluster-id in us-east-1 and write me a markdown report.」 (us-east-1 リージョンで Aurora DSQL クラスター cluster-id のパフォーマンスをチェックし、Markdown 形式のレポートを作成してください)
このスキルは、CloudWatch モデルコンテキストプロトコル (MCP) サーバーを使用して、選択した時間枠にわたって db.active_sessions.avg メトリクスを分析し、Markdown 形式のレポートを返します。このパフォーマンス比較ウィンドウは、プロンプトで次のように指定できます。
「Check performance for the last 4 hours and compare against last Monday.」 (過去 4 時間のパフォーマンスを確認し、先週の月曜日と比較してください)
特定のクエリに問題があると判断された場合、スキルは SQL に特化した詳細な診断ワークフローを開始し、そのステートメントに対する潜在的な解決策を報告します。検出した待機イベントのシフトに基づいてクエリを詳しく調べるかどうかは自動的に判断されるため、追加のプロンプトは不要です。
関連リソース
-
PromQL を使用したメトリクスのクエリ — CloudWatch での PromQL サポートの概要。
-
Query Studio での PromQL クエリの実行 — CloudWatch コンソールのインタラクティブなクエリワークベンチ。
-
OpenTelemetry 形式の AWS 提供メトリクス – Aurora DSQL 用のメトリクスを含む AWS サービスメトリクスを PromQL クエリ可能な時系列として公開する方法。
-
Amazon CloudWatch Database Insights – データベースの負荷とパフォーマンスをモニタリングするための CloudWatch UI。
-
GitHub ウェブサイトの Agent Plugins for AWS
– Aurora DSQL システム診断 AI スキルを含む databases-on-awsプラグインのソースリポジトリ。