CloudWatch Database Insights を使用した Amazon Aurora PostgreSQL のロックツリーの分析 - Amazon CloudWatch

CloudWatch Database Insights を使用した Amazon Aurora PostgreSQL のロックツリーの分析

ロックによるパフォーマンスの問題をトラブルシューティングするには、以下を使用して CloudWatch Database Insights で Amazon Aurora PostgreSQL データベースのロックツリーを分析できます。

  • [分類方法] ドロップダウン – データベース負荷チャートでブロッキングオブジェクトブロッキングセッション、またはブロッキング SQL ディメンションを選択すると、時間の経過とともに上位のブロッカーが DB 負荷にどのように影響するかが表示されます。DB 負荷チャートを使用すると、上位のブロッカーが一定であるか、頻繁に変化するかを分析できます。その後、ブロッカーのトラブルシューティングを行うことができます。

    [分類方法]ドロップダウンでブロックセッションが選択された[上位 SQL] テーブル
  • [ロック分析] タブ – [DB 負荷分析] を選択し、[ロック分析] タブを選択して、データベース内のロック競合に関する情報を表示します。

    データベースロードダッシュボードの [ロックツリー] テーブル
注記

CloudWatch Database Insights は、すべての Aurora PostgreSQL バージョンのロック分析をサポートしています。ロックツリーを分析するには、 Database Insights アドバンスモードが有効になっている必要があります。アドバンストモードを有効にする方法については、「Amazon Aurora で Database Insights のアドバンストモードを有効にする」および「Turning on the Advanced mode of Database Insights for Amazon Relational Database Service」を参照してください

[ロック分析] タブには、データベースのロック競合に関する情報が表示されます。ロックツリーの視覚化では、異なるセッションからのロックリクエスト間の関係と依存関係が表示されます。

Database Insights は 15 秒ごとにスナップショットをキャプチャします。スナップショットには、特定の時点でのデータベースのロックデータが表示されます。

注記

CloudWatch がハイロックを検出すると、CloudWatch は [ロック分析] タブの [ハイロック検出] バナーを表示します。CloudWatch は、15 秒ごとにロックのスナップショットを 15 分間連続して取得すると、高ロック状態と判断します。

ツリー内の各ノードは、特定のセッションを表します。親ノードは、子ノードをブロックしているセッションです。

ロックツリーを分析するには、次の手順を使用します。

ロックツリーを分析するには
  1. AWS Management Console にサインインして、CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. [Insights] を選択します。

  3. [Database Insights] を選択します。

  4. [データベースインスタンス] ビューを選択します。

  5. DB インスタンスを選択します。

  6. [DB 負荷分析] タブを選択します。

  7. [ロック分析] タブを選択します。

    DB インスタンスのロックデータを表示するには、1 日以下の期間を選択します。

  8. スナップショットウィンドウを選択します。デフォルトでは、Database Insights はブロックされたセッションが最も多いスナップショットウィンドウを選択します。

    ロック分析テーブル
  9. スナップショットのロックデータを表示するには、 Database Insights がスナップショットを作成した時間を選択します。

  10. ロックツリーを展開するには、セッション ID の横にある矢印を選択します。

    ロックツリーが展開されました

スナップショットデータのロック

Database Insights は、ロックリクエストごとに次の情報を提供します。デフォルトで有効になっていない列を表示するには、ロックツリーテーブルの [設定] アイコンを選択し、他の列を有効にします。

列名 定義 デフォルト列 メモ

session_id

一意のセッション識別子。

はい

session_idHEX(pg_stat_activity.backend_start).HEX(pg_locks.pid) から派生します。

pid

このバックエンドの PID。

はい

pg_locks.pid

blocked_sessions_count

このロックによってブロックされたセッションの数。

はい

blocked_sessions_count は、このロックによってブロックされたセッション ID の数から算出されます。

last_query_executed

このセッションで最後に実行されたクエリ。ブロッカーの場合、ブロッキングロックを保持しているのはクエリではない可能性があります。

はい

pg_stat_activity.query

wait_event

バックエンドが現在待機中の場合は待機イベント名、それ以外の場合は値は NULL になります。

はい

pg_stat_activity.wait_event

blocking_time_(In Seconds)

このロックの開始からの時間 (秒単位)。

はい

blocking_time_(In Seconds) は、最初のウェーターの待機トランザクション (pg_locks.waitstart) の開始時刻から算出されます。

blocking_mode

ブロッキングセッションによって保持されるロックモード。

いいえ

pg_locks.mode

waiting_mode

待機中のセッションによってリクエストされたロックモード。

いいえ

pg_locks.mode

application

このバックエンドに接続されたアプリケーションの名前。

いいえ

pg_stat_activity.application_name

blocking_txn_start_time

ブロッキングトランザクションの開始時刻、またはアクティブなトランザクションがない場合は null。

いいえ

pg_stat_activity.xact_start

waiting_start_time

待機中のユーザーセッションがこのロックの待機を開始した時刻、またはロックが保持されている場合は null 。

いいえ

pg_locks.waitstart

session_start_time

ユーザー セッションが開始された時刻。

いいえ

pg_stat_activity.backend_start

state

バックエンドの状態。

いいえ

pg_stat_activity.state

wait_event_type

このセッションが待機している待機イベントタイプ。

いいえ

pg_stat_activity.wait_event_type

last_query_exec_time

最後のクエリが開始された時刻。

いいえ

pg_stat_activity.query_start

user

このバックエンドにログインしたユーザー名。

いいえ

pg_stat_activity.usename

host

接続されたクライアントのホスト名 (client_addr の逆引き DNS 参照によって報告されたもの) このフィールドは、IP 接続かつ log_hostname が有効な場合にのみ非 null になります。

いいえ

pg_stat_activity.client_hostname

port

クライアントがこのバックエンドとの通信に使用している TCP ポート番号。Unix ソケットを使用している場合は -1。このフィールドが null の場合は、これが内部サーバープロセスであることを示します。

いいえ

pg_stat_activity.client_port

client_address

このバックエンドに接続されているクライアントの IP アドレス。このフィールドが null の場合、クライアントがサーバーマシンの Unix ソケットを介して接続されているか、autovacuum などの内部プロセスであることを示します。

いいえ

pg_stat_activity.client_addr

granted

この値は、ロックが保持されている場合は true、ロックが待機している場合は false です。

いいえ

pg_locks.granted

waiting_tuple

ページ内のロックの対象となるタプル番号。ターゲットがタプルでない場合は null。

いいえ

pg_locks.tuple

waiting_page

リレーション内のロックの対象となるページ番号。ターゲットがリレーションページまたはタプルでない場合は null。

いいえ

pg_locks.page

waiting_transaction_id

ロックの対象となるトランザクションの ID。ターゲットがトランザクション ID でない場合は null。

いいえ

pg_locks.transactionid

waiting_relation

ロックの対象となるリレーションの OID。ターゲットがリレーションまたはリレーションの一部でない場合は null。

いいえ

pg_locks.relation

waiting_object_id

システムカタログ内のロックターゲットの OID。ターゲットが一般的なデータベースオブジェクトでない場合は null。

いいえ

pg_locks.objid

waiting_database_id

ロックターゲットが存在するデータベースの OID。ターゲットが共有オブジェクトの場合は 0、ターゲットがトランザクション ID の場合は null。

いいえ

pg_locks.database

waiting_database_name

ロックターゲットが存在するデータベースの名前。

いいえ

pg_stat_activity.datname

waiting_locktype

ロック可能なオブジェクトの種類: relation、extend、frozenid、page、tuple、transactionid、virtualxid、spectoken、object、userlock、advisory、applytransaction。

いいえ

pg_locks.locktype

is_fastpath

この値は、ロックが高速パスで取得された場合は true、メインロックテーブルから取得された場合は false です。

いいえ

pg_locks.fastpath

pg_stat_activity および pg_locks ビューの値の詳細については、PostgreSQL ドキュメントの以下のトピックを参照してください。