Limitless Database 待機イベント
Aurora PostgreSQL Limitless Database には、次の待機イベントが適用されます。これらの待機イベントをモニタリングして、Aurora PostgreSQL Limitless Database の処理におけるボトルネックを特定できます。
IO:TwophaseFilePoolWrite 待機イベント
2 相状態のファイルプール内の 2 相状態のファイルの書き込みを待っています。これは Aurora 固有のイベントです。
原因
Limitless Database 分散トランザクションの参加者を含め、PREPARED TRANSACTION
コマンドを実行するプロセスでは、トランザクションの状態を 2 相ファイルに保持する必要があります。Aurora は、ファイルプールを使用してこのオペレーションのパフォーマンスを向上させます。
アクション
これは同期的な書き込み I/O オペレーションです。したがって、このイベントのレイテンシーが高い場合は、IO:XactSync
と同様の原因があり、同じ方法で調査できます。Limitless Database を使用する場合は、実行される分散トランザクションの数を減らす必要が生じることがあります。
IO:TwophaseFilePoolRead 待機イベント
2 相状態のファイルプール内の 2 相状態のファイルの読み取りを待っています。
原因
Limitless Database 分散トランザクションの参加者を含め、以前に準備されたトランザクションに対して COMMIT PREPARED
コマンドを実行するプロセスでは、2 相ファイルから事前に保持されたトランザクション状態の読み取りが必要になる場合があります。Aurora は、ファイルプールを使用してこのオペレーションのパフォーマンスを向上させます。
アクション
これは読み取り I/O オペレーションです。したがって、このイベントのレイテンシーが高い場合は、IO:DataFileRead
と同様の原因があり、同じように調査できます。Limitless Database を使用する場合は、実行される分散トランザクションの数を減らす必要が生じることがあります。
AuroraLimitless:Connect 待機イベント
プロセスは、クラスター内の別のノードへの接続が確立されるのを待っています。
原因
クエリ、分散トランザクション、DDL を実行するために、プロセスとリモートノードの間の接続が確立されます。
アクション
クラスターへの同時接続数を減らすか、複数のシャードにまたがるクエリの使用を調整します。
AuroraLimitless:AsyncConnect 待機イベント
このイベントは Connect
に似ていますが、一連のノードへの並列接続が確立されるのを待つプロセスを表しています。
原因
並列接続の確立は、DDL ステートメントの実行時に最も一般的に行われます。
アクション
DDL ステートメントの数を減らすか、同じセッションで複数の DDL を組み合わせて、接続をより適切に再利用します。
AuroraLimitless:RemoteStatementSetup 待機イベント
プロセスは、カーソルのオープン、クローズ、プリペアドステートメントの作成など、リモートクエリ実行のセットアップを待っています。
原因
この待機イベントは、ステートメントの単一シャード最適化を行えなかったシャードテーブルのスキャン数に応じて増加します。
アクション
クエリを最適化してスキャンオペレーションの数を減らしたり、単一シャード最適化の適格基準を引き上げたりします。
AuroraLimitless:RemoteDDLExecution 待機イベント
プロセスは、リモート DDL コマンドが終了するのを待っています。
原因
DB シャードグループで DDL コマンドを発行するときは、オペレーションを確定する前に、他のルーターとシャードノードに分散する必要があります。一部の DDL オペレーションは、スキーマの変更に合わせてデータの調整が必要になるため、実行が長時間に及ぶ場合があります。
アクション
実行時間が長い DDL コマンドを特定して、それらを最適化します。
AuroraLimitless:RemoteStatementExecution 待機イベント
プロセスはリモートコマンドの終了を待っています。
原因
SQL コマンドがリモートノードで実行されています。このイベントは、auto_analyze
やハートビートチェックなどの内部通信で頻繁に表示されます。
アクション
limitless_stat_statements ビューを使用して、実行時間が長いコマンドを特定します。多くの場合、特にバックグラウンドワーカーや内部プロセスでは、これは想定されるイベントであり、アクションは必要ありません。
AuroraLimitless:FetchRemoteResults 待機イベント
プロセスは、リモートノードから行を取得するのを待っています。
原因
この待機イベントは、シャードテーブルやリファレンステーブルなど、リモートテーブルから多数の行を取得すると増加する可能性があります。
アクション
limitless_stat_statements
ビューを使用して、最適化されていない SELECT
クエリを特定します。必要なデータのみを取得するようにクエリを最適化します。rds_aurora.limitless_maximum_adaptive_fetch_size
パラメータを調整することもできます。
AuroraLimitless:AsyncGetInitialResponse 待機イベント
プロセスは、パイプラインモードがクエリ実行で使用されている場合に初期レスポンスを待っています。
原因
これは通常、単一シャードデータ配置を持つクエリのルーターからシャードへの実行時に表示され、通常の実行の一部として想定されるものです。
アクション
これ以上、何もする必要はありません。
AuroraLimitless:AsyncGetNextResponse 待機イベント
プロセスは、パイプラインモードがクエリ実行で使用されている場合に追加レスポンスを待っています。
原因
これは通常、単一シャードデータ配置を持つクエリのルーターからシャードへの実行時に表示され、通常の実行の一部として想定されるものです。
アクション
これ以上、何もする必要はありません。
AuroraLimitless:AbortedCommandCleanup 待機イベント
プロセスは、リモートクリーンアップクエリの結果を待っています。分散トランザクションが終了すると、シャードノードを適切な状態に戻すために、クリーンアップクエリがシャードノードに発行されます。
原因
エラーの検出が原因で、またはユーザーが明示的に ABORT コマンドを発行するか実行中のクエリをキャンセルしたことが原因でトランザクションが中止されると、トランザクションのクリーンアップが行われます。
アクション
トランザクションのキャンセルの原因を調べます。
AuroraLimitless:DistributedCommitPrepare 待機イベント
プロセスは分散トランザクションをコミットしており、すべての参加者が準備コマンドを承認するのを待っています。
原因
複数のノードを変更するトランザクションでは、分散コミットを実行する必要があります。参加ノードの IO:TwophaseFilePoolWrite
イベントで長時間に及ぶ待機が生じると、それが原因となって DistributedCommitPrepare
で長時間の待機が発生する場合があります。
アクション
複数のノードのデータを変更するトランザクションの数を減らします。クラスターの他のノードの IO:TwophaseFilePoolWrite
イベントを調査します。
AuroraLimitless:DistributedCommit 待機イベント
プロセスは分散トランザクションをコミットしており、リード参加者がコミットコマンドを承認するのを待っています。
原因
複数のノードを変更するトランザクションでは、分散コミットを実行する必要があります。リード参加者の IO:XactSync
イベントで長時間に及ぶ待機が生じると、それが原因となって DistributedCommit
で長時間の待機が発生する場合があります。
アクション
複数のノードのデータを変更するトランザクションの数を減らします。クラスターの他のノードの IO:XactSync
イベントを調査します。
AuroraLimitless:DistributedCommitPrepareThrottle 待機イベント
プロセスは分散トランザクションの準備を試みており、既存の準備済みトランザクションによりスロットリングされています。
原因
複数のノードを変更するトランザクションでは、分散コミットを実行する必要があります。これらのトランザクションの参加者は、コミットプロトコルの一環として準備オペレーションを実行する必要があります。Aurora では同時準備の数が制限されており、この制限を超えると、プロセスは DistributedCommitPrepareThrottle
イベントで待機します。
アクション
複数のノードのデータを変更するトランザクションの数を減らします。IO:TwophaseFilePoolWrite
イベントで時間が長引くと、既存の準備済みトランザクションが蓄積され、新しい準備の試行がスロットリングされる可能性があるため、これらのイベントを調査します。
AuroraLimitless:PreparedTransactionResolution 待機イベント
プロセスで、準備状態の分散トランザクションによって変更されたタプルが発生しました。分散トランザクションをスナップショットに表示するかどうかをプロセスが判断する必要があります。
原因
複数のノードを変更するトランザクションでは、準備フェーズを含む分散コミットを実行する必要があります。分散トランザクションの数が多い場合や、分散コミットでレイテンシーが増加した場合、他のプロセスで PreparedTransactionResolution
待機イベントが発生する可能性があります。
アクション
複数のノードのデータを変更するトランザクションの数を減らします。分散コミット関連イベントの時間が長引くと、分散トランザクションのコミットパスのレイテンシーが増加する可能性があるため、これらのイベントを調査します。また、ネットワークと CPU の負荷を調査することもできます。
AuroraLimitless:SendPreparedTransactionOutcome 待機イベント
プロセスは分散トランザクションをコーディネートしているノードで実行されており、別のプロセスがそのトランザクションの状態について問い合わせたか、プロセスが分散トランザクションをコミットして結果を参加者に送信しています。
原因
PreparedTransactionResolution
待機イベントが発生すると、プロセスはトランザクションコーディネーターにクエリを実行します。トランザクションコーディネーターのレスポンスで、SendPreparedTransactionOutcome が発生します。
アクション
複数のノードのデータを変更するトランザクションの数を減らします。分散コミット関連のイベント、IO:TwophaseFilePoolWrite
イベント、IO:TwophaseFilePoolRead
イベントが原因で分散トランザクションのコミットパスのレイテンシーが増加する可能性があるため、これらのイベントを調査します。また、ネットワークと CPU の負荷を調査することもできます。
AuroraLimitless:CommitClockBarrier 待機イベント
プロセスはトランザクションをコミットしており、割り当てられたコミット時間がクラスター内のすべてのノードで確実に過去となっていることを保証するために、待機する必要があります。
原因
CPU またはネットワークの飽和よってクロックドリフトが増加し、この待機イベントに時間が費やされる場合があります。
アクション
クラスター内の CPU またはネットワークの飽和状態を調べます。
AuroraLimitless:SnapshotClockBarrier 待機イベント
プロセスは、将来のクロックを持つ別のノードからスナップショット時間を受け取り、その時間に到達するのを待っています。
原因
これは通常、プロセスがシャードにプッシュダウンされた関数から結果を受け取り、ノード間にクロックドリフトが発生している場合に発生します。CPU またはネットワークの飽和よってクロックドリフトが増加し、この待機イベントに時間が費やされる場合があります。
アクション
クラスター内の CPU またはネットワークの飽和状態を調べます。
AuroraLimitless:ReaderSnapshotClockBarrier 待機イベント
このイベントは読み取りノードで発生します。プロセスは、プロセスのスナップショット時間の前に発生したすべての書き込みが適用されるように、読み取りノードが書き込みストリームを再生するのを待っています。
原因
Aurora レプリカの遅延が増加すると、このイベントでの待機時間が長くなる可能性があります。
アクション
Aurora レプリカの遅延を調査します。
AuroraLimitless:GatherDistributedDeadlockGraph 待機イベント
プロセスは他のノードと通信して、分散デッドロック検出の一環としてロックグラフを収集しています。
原因
ロックの待機中、待機時間が rds_aurora.limitless_distributed_deadlock_timeout
を超えると、プロセスは分散デッドロックチェックを実行します。
アクション
アプリケーションのロック競合の原因を調査し、rds_aurora.limitless_distributed_deadlock_timeout
の調整を検討します。
AuroraLimitless:DistributedDeadlockDetection 待機イベント
プロセスは、分散デッドロックを検出するために他のノードと通信しています。
原因
ロックの待機中、待機時間が rds_aurora.limitless_distributed_deadlock_timeout
を超えると、プロセスは分散デッドロックチェックを実行します。
アクション
アプリケーションのロック競合の原因を調査し、rds_aurora.limitless_distributed_deadlock_timeout
の調整を検討します。
AuroraLimitless:DistributedDeadlockAbort 待機イベント
プロセスは、分散デッドロックの対象として選択されたセッションを中止するために、別のノードと通信しています。
原因
アプリケーションパターンが分散デッドロックを引き起こしています。
アクション
分散デッドロックの原因となっているアプリケーションパターンを調査します。
AuroraLimitless:GatherRemoteStats 待機イベント
プロセスは、クラスター内の他のノードから統計を収集しています。
原因
limitless_stat_activity
などのモニタリングまたはアクティビティクエリおよびビューが、他のノードから統計を取得しようとしています。
アクション
これ以上、何もする必要はありません。
AuroraLimitless:GlobalSequenceRefresh 待機イベント
プロセスは、新しいシーケンス値を生成しており、グローバルシーケンスから新しいチャンクをリクエストする必要があります。
原因
rds_aurora.limitless_sequence_chunk_size
が不十分な場合、シーケンス値の生成率が高いと、このイベントで停止が発生する可能性があります。
アクション
この発生は正常です。このイベントで時間が長すぎる場合は、rds_aurora.limitless_sequence_chunk_size
の調整を検討してください。Limitless Database のシーケンスに関するドキュメントを参照してください。
AuroraLimitless:GlobalVacuumTimeExchange 待機イベント
プロセスは、バキュームをサポートするためにスナップショットデータを交換しています。
原因
Limitless Database のノードは、最も古いアクティブなスナップショット時間データを他のノードと交換して、バキューム実行の正しいカットオフ時間を計算します。
アクション
これ以上、何もする必要はありません。
AuroraLimitless:DistributedTransactionMonitorGather 待機イベント
プロセスは、分散トランザクションのクリーンアップをサポートするために、他のノードからトランザクションメタデータを収集しています。
原因
Limitless Database のノードは、トランザクションメタデータを他のノードと交換して、分散トランザクションの状態を消去できるタイミングを判断します。
アクション
これ以上、何もする必要はありません。
AuroraLimitlessActivity:AdminTaskSchedulerMain 待機イベント
タスクスケジューラプロセスのメインループで待機しています。
AuroraLimitlessActivity:AdminTaskExecutorMain 待機イベント
タスクエグゼキュタープロセスのメインループで待機しています。
AuroraLimitlessActivity:AdminTaskMonitorMain 待機イベント
タスクモニタリングプロセスのメインループで待機しています。
AuroraLimitlessActivity:DatabaseCleanupMonitorMain 待機イベント
データベースクリーンアップモニタリングプロセスのメインループで待機しています。
AuroraLimitlessActivity:TopologyCleanupMonitorMain 待機イベント
トポロジクリーンアップモニタリングプロセスのメインループで待機しています。
AuroraLimitlessActivity:ToplogyChangeMonitorMain 待機イベント
トポロジ変更モニタリングプロセスのメインループで待機しています。
AuroraLimitlessActivity:DistributedTransactionMonitorMain 待機イベント
分散トランザクションモニタリングプロセスのメインループで待機しています。
AuroraLimitlessActivity:GlobalVacuumMonitorMain 待機イベント
グローバルバキュームモニタリングプロセスのメインループで待機しています。