

# CloudWatch Database Insights を使用した Amazon Aurora PostgreSQL と Amazon RDS for PostgreSQL のロックツリーの分析
<a name="Database-Insights-Lock-Analysis"></a>

ロックによるパフォーマンスの問題をトラブルシューティングするには、以下を使用して CloudWatch Database Insights で Amazon Aurora PostgreSQL と Amazon RDS for PostgreSQL のデータベースのロックツリーを分析できます。
+ **[分類方法]** ドロップダウン – **データベース負荷**チャートで**ブロッキングオブジェクト**、**ブロッキングセッション**、または**ブロッキング SQL** ディメンションを選択すると、時間の経過とともに上位のブロッカーが DB 負荷にどのように影響するかが表示されます。DB 負荷チャートを使用すると、上位のブロッカーが一定であるか、頻繁に変化するかを分析できます。その後、ブロッカーのトラブルシューティングを行うことができます。  
![\[[分類方法]ドロップダウンでブロックセッションが選択された[上位 SQL] テーブル\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/images/DBInsights_TopSQLBlocking.png)
+ **[ロック分析]** タブ – **[DB 負荷分析]** を選択し、**[ロック分析]** タブを選択して、データベース内のロック競合に関する情報を表示します。  
![\[データベースロードダッシュボードの [ロックツリー] テーブル\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/images/DBInsights_LoadLockAnalysis.png)

**注記**  
CloudWatch Database Insights は、すべての Aurora PostgreSQL バージョンのロック分析をサポートしています。ロックツリーを分析するには、 Database Insights アドバンスモードが有効になっている必要があります。アドバンストモードを有効にする方法については、「[Amazon Aurora で Database Insights のアドバンストモードを有効にする](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_DatabaseInsights.TurningOnAdvanced.html)」および「[Turning on the Advanced mode of Database Insights for Amazon Relational Database Service](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DatabaseInsights.TurningOnAdvanced.html)」を参照してください

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

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

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

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

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

**ロックツリーを分析するには**

1. AWS マネジメントコンソール にサインインして、CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)) を開きます。

1. **[Insights]** を選択します。

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

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

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

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

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

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

1. スナップショットウィンドウを選択します。デフォルトでは、Database Insights はブロックされたセッションが最も多いスナップショットウィンドウを選択します。  
![\[ロック分析テーブル\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/images/dbi_lock-analysis.png)

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

1. ロックツリーを展開するには、セッション ID の横にある矢印を選択します。  
![\[ロックツリーが展開されました\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/images/dbi_lock-analysis-expand.png)

## スナップショットデータのロック
<a name="Database-Insights-Lock-Analysis-snapshot-data"></a>

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


| 列名 | 定義  | デフォルト列 | 注意事項 | 
| --- | --- | --- | --- | 
|  `session_id`  | 一意のセッション識別子。 |  あり  | `session_id` は `HEX(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\$1hostname](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-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 ドキュメントの以下のトピックを参照してください。
+ [pg\$1locks](https://www.postgresql.org/docs/current/view-pg-locks.html)
+ [pg\$1stat\$1activity](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW)