Amazon Aurora MySQL DB クラスターでのローカル書き込み転送の使用
ローカル (クラスター内) 書き込み転送により、アプリケーションは Aurora レプリカで直接、読み取り/書き込みトランザクションを発行できます。その後、これらのトランザクションはライター DB インスタンスに転送されてコミットされます。アプリケーションで書き込み後の読み取り一貫性 (トランザクション内の最新の書き込みを読み取る機能) が必要なときには、ローカル書き込み転送を使用できます。
リードレプリカは、ライターから非同期で更新を受け取ります。書き込み転送を行わないと、書き込み後の読み取り一貫性を必要とする読み取りをライター DB インスタンス上で処理する必要があります。または、複数のリードレプリカを活用してスケーラビリティを高めるために、複雑なカスタムアプリケーションロジックを開発する必要があります。アプリケーションは、トラフィックを正しいエンドポイントに送信するために、すべての読み取りトラフィックと書き込みトラフィックを完全に分割して、2 セットのデータベース接続を維持する必要があります。クエリがアプリケーション内の単一の論理セッション、つまりトランザクションの一部である場合、この開発オーバーヘッドはアプリケーションの設計を複雑にします。さらに、レプリケーションの遅延はリードレプリカによって異なる場合があるため、データベース内のすべてのインスタンスでグローバルな読み取りの一貫性を実現することは困難です。
書き込み転送により、これらのトランザクションを分割したり、ライターのみに送信したりする必要がなくなるため、アプリケーション開発が簡単になります。この新機能により、トランザクション内の最新の書き込みを読み取る必要があり、書き込み遅延の影響を受けないワークロードの読み取りスケールを簡単に実現できます。
ローカル書き込み転送は、Aurora グローバルデータベースのセカンダリ DB クラスターからプライマリ DB クラスターに書き込みを転送するグローバル書き込み転送とは異なります。Aurora グローバルデータベースの一部である DB クラスターでは、ローカル書き込み転送を使用できます。詳細については、「Amazon Aurora Global Database の書き込み転送を使用する」を参照してください。
ローカル書き込み転送には Aurora MySQL バージョン 3.04 以降が必要です。
トピック
ローカル書き込み転送の有効化
デフォルトでは、Aurora MySQL DB クラスターのローカル書き込み転送は有効になっていません。ローカル書き込み転送は、インスタンスレベルではなくクラスターレベルで有効にします。
重要
バイナリロギングを使用するクロスリージョンリードレプリカに対してローカル書き込み転送を有効にすることもできますが、書き込み操作はソース AWS リージョン に転送されません。これらは、binlog リードレプリカクラスターのライター DB インスタンスに転送されます。
この方法は、セカンダリ AWS リージョン の binlog リードレプリカへの書き込みの用途がある場合にのみ使用してください。そうしないと、複製されたデータセットが互いに矛盾する「スプリットブレーン」シナリオになってしまう可能性があります。
どうしても必要な場合を除いて、クロスリージョンのリードレプリカでのローカル書き込み転送ではなく、グローバルデータベースでのグローバル書き込み転送を使用することをお勧めします。詳細については、「Amazon Aurora Global Database の書き込み転送を使用する」を参照してください。
DB クラスターを作成または変更するときに、AWS Management Console を使用して、[リードレプリカ書き込み転送] の [ローカル書き込み転送を有効にする] チェックボックスを選択します。
AWS CLI で書き込み転送を有効にするには、--enable-local-write-forwarding
オプションを使用します。このオプションは、create-db-cluster
コマンドを使用して新しい DB クラスターを作成するときに機能します。modify-db-cluster
コマンドを使用して、既存の DB クラスターを変更する場合にも機能します。これらの同じ CLI コマンドで --no-enable-local-write-forwarding
オプションを使用することで、書き込み転送をオフにすることができます。
次の例では、書き込み転送を有効にした Aurora MySQL DB クラスターを作成します。
aws rds create-db-cluster \ --db-cluster-identifier write-forwarding-test-cluster \
--enable-local-write-forwarding
\ --engine aurora-mysql \ --engine-version8.0.mysql_aurora.3.04.0
\ --master-username myuser \ --master-user-password mypassword \ --backup-retention 1
次に、書き込み転送を使用できるように、ライター DB インスタンスとリーダー DB インスタンスを作成します。詳細については、「Amazon Aurora DB クラスターの作成」を参照してください。
Amazon RDS API を使用して書き込み転送を有効にするには、EnableLocalWriteForwarding
パラメータを true
に設定します。このパラメータは、CreateDBCluster
オペレーションを使用して新しい DB クラスターを作成するときに機能します。この操作は、ModifyDBCluster
オペレーションを使用して既存の DB クラスターを変更する場合にも機能します。EnableLocalWriteForwarding
パラメータを false
に設定することで、書き込み転送をオフにすることができます。
データベースセッションの書き込み転送を有効にする
aurora_replica_read_consistency
パラメータは、書き込み転送を有効にする DB パラメータと DB クラスターパラメータです。読み取り整合性レベルには、EVENTUAL
、SESSION
、または GLOBAL
を指定できます。整合性レベルの詳細については、書き込み転送の読み取り整合性 を参照してください。
このパラメータには、次の規則が適用されます。
-
デフォルト値は null です。
-
書き込み転送は、
aurora_replica_read_consistency
をEVENTUAL
、SESSION
、またはGLOBAL
に設定した場合にのみ使用できます。このパラメータは、書き込み転送が有効な DB クラスターのリーダーインスタンスにのみ関係します。 -
マルチステートメントトランザクション内で、このパラメータを設定したり (空の場合)、設定解除したり (既に設定されている場合) することはできません。そのようなトランザクション中に、ある有効な値から別の有効な値に変更できますが、このアクションはお勧めしません。
DB クラスターの書き込み転送が有効になっているかどうかの確認
DB クラスターで書き込み転送を使用できるかどうかを判断するには、クラスターの属性 LocalWriteForwardingStatus
が enabled
に設定されていることを確認します。
クラスターの詳細ページの [設定] タブの AWS Management Console に、[ローカルリードレプリカ書き込み転送] のステータスが [有効] と表示されます。
すべてのクラスターの書き込み転送設定のステータスを表示するには、次の AWS CLI コマンドを実行します。
aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}' [ { "LocalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "write-forwarding-test-cluster-1" }, { "LocalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "write-forwarding-test-cluster-2" }, { "LocalWriteForwardingStatus": "requested", "DBClusterIdentifier": "test-global-cluster-2" }, { "LocalWriteForwardingStatus": "null", "DBClusterIdentifier": "aurora-mysql-v2-cluster" } ]
DB クラスターは、LocalWriteForwardingStatus
として以下の値を持ちます。
-
disabled
— 書き込み転送は無効です。 -
disabling
— 書き込み転送は無効化中です。 -
enabled
— 書き込み転送は有効です。 -
enabling
— 書き込み転送は有効化中です。 -
null
— この DB クラスターでは書き込み転送は使用できません。 -
requested
— 書き込み転送がリクエストされましたが、まだアクティブではありません。
書き込み転送とアプリケーションおよび SQL の互換性
書き込み転送では、次の種類の SQL ステートメントを使用できます。
-
INSERT
、DELETE
、およびUPDATE
などのデータ操作言語 (DML) ステートメント。書き込み転送で使用できるこれらのステートメントのプロパティには、以下で説明するように、いくつかの制限があります。 -
SELECT ... LOCK IN SHARE MODE
とSELECT FOR UPDATE
ステートメント。 -
PREPARE
とEXECUTE
ステートメント。
書き込み転送機能を持つ DB クラスターでは、特定のステートメントの使用が許可されていないか、古い結果を生成する可能性があります。したがって、DB クラスターでは、EnableLocalWriteForwarding
設定はデフォルトで無効になっています。有効にする前に、アプリケーションコードがこれらの制限の影響を受けないことを確認してください。
書き込み転送で使用する SQL ステートメントには、次の制限が適用されます。場合によっては、書き込み転送が有効な DB クラスターでステートメントを使用できます。この方法は、aurora_replica_read_consistency
設定パラメータによってセッション内で書き込み転送が有効化されていない場合に機能します。書き込み転送のために許可されていないステートメントを使用しようとすると、次のようなエラーメッセージが表示されます。
ERROR 1235 (42000): This version of MySQL doesn't yet support '
operation
with write forwarding'.
- データ定義言語 (DDL)
-
ライター DB インスタンスに接続して DDL ステートメントを実行します。リーダー DB インスタンスからは実行できません。
- テンポラリテーブルのデータを使用した永続テーブルの更新
-
書き込み転送が有効な DB クラスターでテンポラリテーブルを使用できます。ただし、ステートメントがテンポラリテーブルを参照している場合は、DML ステートメントを使用して永続テーブルを変更することはできません。例えば、テンポラリテーブルからデータを取る
INSERT ... SELECT
ステートメントを使用することはできません。 - XA トランザクション
-
セッション内で書き込み転送が有効になっている場合、DB クラスターで次のステートメントを使用することはできません。これらのステートメントは、書き込み転送が有効になっていない DB クラスター、または
aurora_replica_read_consistency
設定が空のセッションで使用できます。セッション内で書き込み転送を有効にする前に、コードでこれらのステートメントが使用されているかどうかを確認してください。XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]
- 永続テーブルの LOAD ステートメント
-
書き込み転送が有効な DB クラスターでは、以下のステートメントを使用できません。
LOAD DATA INFILE 'data.txt' INTO TABLE t1; LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;
- プラグインステートメント
-
書き込み転送が有効な DB クラスターでは、以下のステートメントを使用できません。
INSTALL PLUGIN example SONAME 'ha_example.so'; UNINSTALL PLUGIN example;
- SAVEPOINT ステートメント
-
セッション内で書き込み転送が有効になっている場合、DB クラスターで次のステートメントを使用することはできません。これらのステートメントは、書き込み転送が有効になっていない DB クラスター、または
aurora_replica_read_consistency
設定が空白のセッションで使用できます。セッション内で書き込み転送を有効にする前に、コードでこれらのステートメントが使用されているかどうかを確認してください。SAVEPOINT t1_save; ROLLBACK TO SAVEPOINT t1_save; RELEASE SAVEPOINT t1_save;
書き込み転送の分離レベル
書き込み転送を使用するセッションでは、REPEATABLE READ
分離レベルのみを使用できます。Aurora レプリカで READ COMMITTED
分離レベルを使用することもできますが、その分離レベルは書き込み転送では機能しません。REPEATABLE READ
および READ COMMITTED
分離レベルの詳細については、「Aurora MySQL の分離レベル」を参照してください。
書き込み転送の読み取り整合性
DB クラスターの読み取り整合性の程度を制御できます。読み取り整合性レベルによって、一部またはすべての変更がライターからレプリケートされるように、各読み取りオペレーションの前の DB クラスターの待機時間が決まります。読み取り整合性レベルを調整して、セッションから転送されたすべての書き込みオペレーションが、後続のクエリの前に DB クラスターに表示することができます。また、この設定を使用して、DB クラスターのクエリに、常にライターからの最新の更新が表示されるようにすることもできます。この設定は、他のセッションまたは他のクラスターによって送信されるクエリにも適用されます。アプリケーションでこの種類の動作を指定するには、aurora_replica_read_consistency
DB パラメータまたは DB クラスターパラメータの値を選択します。
重要
書き込みを転送するときには、必ず、aurora_replica_read_consistency
DB パラメータまたは DB クラスターパラメータを設定してください。そうしないと、Aurora は書き込みを転送しません。デフォルトでは、このパラメータに空の値があるため、このパラメータを使用する場合は特定の値を選択してください。aurora_replica_read_consistency
パラメータは、書き込み転送が有効な DB クラスターまたはインスタンスにのみ影響します。
整合性レベルを上げると、アプリケーションは、DB インスタンス間で変更が伝播されるのを待つ時間が長くなります。応答時間の短縮と、クエリを実行する前に他の DB インスタンスで行われた変更が完全に使用可能であることのバランスを選択できます。
aurora_replica_read_consistency
パラメータには以下の値を指定できます。
-
EVENTUAL
— 同じセッションでの書き込み操作の結果は、ライター DB インスタンスで書き込み操作が実行されるまで表示されません。クエリは、更新された結果が使用可能になるのを待つことはありません。したがって、ステートメントのタイミングとレプリケーションの遅延の量によっては、古いデータや更新されたデータが取得される可能性があります。これは、書き込み転送を使用しない Aurora MySQL DB クラスターの場合と同じ整合性です。 -
SESSION
— 書き込み転送を使用するすべてのクエリには、そのセッションで行われたすべての変更の結果が表示されます。トランザクションがコミットされているかどうかにかかわらず、変更が表示されます。必要に応じて、クエリは、転送された書き込み操作の結果がレプリケートされるまで待機します。 -
GLOBAL
— セッションには、DB クラスター内のすべてのセッションとインスタンスでコミットされたすべての変更が表示されます。各クエリは、セッション遅延の量に応じて変化する期間を待つことがあります。クエリは、クエリが開始された時点の、DB クラスターがライターからコミットされたすべてのデータを含む最新状態になったときに実行されます。
書き込み転送に関連する設定パラメータの詳細については、「書き込み転送の設定パラメータ」を参照してください。
注記
跡えば次のように、aurora_replica_read_consistency
をセッション変数として使用することもできます。
mysql> set aurora_replica_read_consistency = 'session';
書き込み転送の使用例
この例は、INSERT
ステートメントの後に SELECT
ステートメントが実行される場合の aurora_replica_read_consistency
パラメータの影響を示しています。aurora_replica_read_consistency
の値とステートメントのタイミングによっては、結果が異なる場合があります。
一貫性を高めるには、SELECT
ステートメントを発行する前にしばらくお待ちください。または Aurora は、結果のレプリケーションが完了するまで自動的に待機してから、SELECT
処理を続行することができます。
DB パラメータの設定の詳細については、「「パラメータグループを使用する」 」を参照してください。
例 aurora_replica_read_consistency
が EVENTUAL
に設定された
INSERT
ステートメントの直後に SELECT
ステートメントを実行すると、新しい行が挿入される前の行数を示す COUNT(*)
の値が返されます。しばらくしてから SELECT
を再度実行すると、更新された行数が返されます。SELECT
ステートメントは待機しません。
mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> insert into t1 values (6); select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)
例 aurora_replica_read_consistency
が SESSION
に設定された
INSERT
の直後の SELECT
ステートメントは、INSERT
ステートメントからの変更が反映されるまで待機します。後続の SELECT
ステートメントは待機しません。
mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.01 sec) mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1; Query OK, 1 row affected (0.08 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.37 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)
読み取り整合性設定を SESSION
に設定したまま、INSERT
ステートメントの実行後に短い待機を行うと、次の SELECT
ステートメントが実行されるまでに更新された行カウントが使用可能になります。
mysql> insert into t1 values (6); select sleep(2); select count(*) from t1; Query OK, 1 row affected (0.07 sec) +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.01 sec) +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)
例 aurora_replica_read_consistency
が GLOBAL
に設定された
各 SELECT
ステートメントは、クエリを実行する前に、ステートメントの開始時刻の時点でのすべてのデータ変更が表示されるように待機します。各 SELECT
ステートメントの待機時間は、レプリケーションラグの量によって異なります。
mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.75 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.37 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.66 sec)
書き込み転送を使用したマルチパートステートメントの実行
DML ステートメントは、INSERT ... SELECT
ステートメントや DELETE ...
WHERE
ステートメントなど、複数の部分から構成される場合があります。この場合、ステートメント全体がライター DB インスタンスに転送され、そこで実行されます。
書込み転送を使用したトランザクション
トランザクションアクセスモードが読み取り専用に設定されている場合、書き込み転送は使用されません。SET TRANSACTION
ステートメントまたは START TRANSACTION
ステートメントを使用して、トランザクションのアクセスモードを指定できます。transaction_read_only
長時間実行されるトランザクションがかなりの期間ステートメントを発行しない場合、アイドルタイムアウト期間を超える可能性があります。この期間のデフォルトは 1 分です。aurora_fwd_writer_idle_timeout
パラメータを設定して、最大 1 日まで増やすことができます。アイドルタイムアウトを超えたトランザクションは、ライターインスタンスによってキャンセルされます。次に送信するステートメントは、タイムアウトエラーを受け取ります。その後、Aurora はトランザクションをロールバックします。
このタイプのエラーは、書き込み転送が使用できなくなった場合に発生する可能性があります。例えば、DB クラスターを再起動した場合や、書き込み転送を無効にした場合、Aurora は書き込み転送を使用するすべてのトランザクションをキャンセルします。
ローカル書き込み転送を使用しているクラスター内のライターインスタンスが再起動されると、ローカル書き込み転送を使用しているリーダーインスタンス上のアクティブで転送されたトランザクションとクエリは自動的に閉じられます。ライターインスタンスが再び使用可能になったら、これらのトランザクションを再試行できます。
書き込み転送の設定パラメータ
Aurora DB パラメータグループには、書き込み転送機能の設定が含まれています。これらのパラメータの詳細を次の表にまとめ、表に続いて使用上の注意を記載してください。
パラメータ | スコープ | タイプ | デフォルト値 | 有効な値 |
---|---|---|---|---|
aurora_fwd_writer_idle_timeout |
クラスター | 符号なし整数 | 60 | 1-86,400 |
aurora_fwd_writer_max_connections_pct |
クラスター | 符号なし長整数 | 10 | 0-90 |
aurora_replica_read_consistency |
クラスターまたはインスタンス | 列挙型 | null | EVENTUAL , SESSION , GLOBAL |
受信する書き込み要求を制御するには、以下の設定を使用してください。
-
aurora_fwd_writer_idle_timeout
— リーダーインスタンスから転送された接続で、ライター DB インスタンスがアクティビティを待ってから、接続を閉じるまでの秒数。この期間を超えてセッションがアイドル状態のままである場合、Aurora はセッションをキャンセルします。 -
aurora_fwd_writer_max_connections_pct
- リーダーから転送されたクエリを処理するためにライター DB インスタンスで使用できるデータベース接続の上限。これは、ライターのmax_connections
設定のパーセンテージで表されます。例えば、max_connections
が800 回、aurora_fwd_master_max_connections_pct
またはaurora_fwd_writer_max_connections_pct
が 10 回 の場合、書き込みは最大 80 回 の同時転送セッションを許可します。これらの接続は、max_connections
設定によって管理される同じ接続プールから取得されます。この設定は、書き込み転送が有効なライターにのみ適用されます。この値を小さくしても、既存の接続は影響を受けません。Aurora は、DB クラスターから新しい接続の作成を試みるときに、この新しい設定値を参照します。デフォルト値は 10 で、
max_connections
値の 10% を表します。
注記
aurora_fwd_writer_idle_timeout
と aurora_fwd_writer_max_connections_pct
は DB クラスターのパラメータであるため、各クラスターのすべての DB インスタンスは、これらのパラメータに同じ値を持ちます。
aurora_replica_read_consistency
の詳細については、「書き込み転送の読み取り整合性」を参照してください。
DB パラメータグループの詳細については、「「パラメータグループを使用する」 」を参照してください。
書き込み転送のための Amazon CloudWatch メトリクスと Aurora MySQL ステータス変数
以下の Amazon CloudWatch メトリクスと Aurora MySQL ステータス変数は、1 つ以上の DB クラスターで書き込み転送を使用するときに適用されます。これらのメトリクスとステータス変数はすべて、ライター DB インスタンスで測定されます。
CloudWatch メトリクス | Aurora MySQL ステータス変数 | 単位 | 説明 |
---|---|---|---|
|
– | Milliseconds |
書き込み DB インスタンスで転送された各 DML ステートメントを処理する平均時間。 DB クラスターが書き込みリクエストを転送する時間や、変更をライターに複製する時間は含まれません。 |
|
– | 1 秒あたりのカウント数 | この書き込み DB インスタンスによって 1 秒間に処理される、転送された DML ステートメントの数。 |
|
Aurora_fwd_writer_open_sessions |
Count (カウント) | 書き込み DB インスタンスで転送されたセッションの数。 |
– |
Aurora_fwd_writer_dml_stmt_count |
Count (カウント) | この書き込み DB インスタンスに転送された DML ステートメントの合計数。 |
– |
Aurora_fwd_writer_dml_stmt_duration |
マイクロ秒 | この書き込み DB インスタンスに転送された DML ステートメントの合計期間。 |
– |
Aurora_fwd_writer_select_stmt_count |
Count (カウント) | この書き込み DB インスタンスに転送された SELECT ステートメントの総数。 |
– |
Aurora_fwd_writer_select_stmt_duration |
マイクロ秒 | この書き込み DB インスタンスに転送された SELECT ステートメントの合計期間。 |
以下の CloudWatch メトリクスと Aurora MySQL ステータス変数は、書き込み転送が有効な DB クラスター内の各リーダー DB インスタンスで測定されます。
CloudWatch メトリクス | Aurora MySQL ステータス変数 | 単位 | 説明 |
---|---|---|---|
|
– | ミリ秒 | レプリカ上で転送された DML の平均応答時間。 |
|
– | 1 秒あたりのカウント数 | 1 秒あたりに処理された転送 DML ステートメントの数。 |
|
Aurora_fwd_replica_open_sessions |
Count (カウント) | リーダー DB インスタンスで書き込み転送を使用しているセッションの数。 |
|
– | ミリ秒 |
リーダー DB インスタンス上の クエリを処理する前にリーダー DB インスタンスが待機する程度は、 |
|
– | 1 秒あたりのカウント数 | 書き込みを転送しているすべてのセッションで、1 秒間処理した SELECT ステートメントの総数。 |
|
– | ミリ秒 | 転送済み SELECT レイテンシー。モニタリング期間内に転送されたすべての SELECT ステートメントの平均値。 |
|
– | 1 秒あたりのカウント数 | モニタリング期間内の 1 秒あたりの転送済み SELECT スループット。 |
– |
Aurora_fwd_replica_dml_stmt_count |
Count (カウント) | このリーダー DB インスタンスから転送された DML ステートメントの合計数。 |
– |
Aurora_fwd_replica_dml_stmt_duration |
マイクロ秒 | このリーダー DB インスタンスから転送された DML ステートメントの合計期間。 |
– |
Aurora_fwd_replica_errors_session_limit |
Count (カウント) |
以下のエラー条件のいずれかが原因でプライマリクラスターが拒否したセッションの数。
|
– |
Aurora_fwd_replica_read_wait_count |
Count (カウント) | このリーダー DB インスタンスでの書き込み後の読み取り待機の合計数。 |
– |
Aurora_fwd_replica_read_wait_duration |
マイクロ秒 | このリーダー DB インスタンスの読み取り整合性設定による待機時間の合計。 |
– |
Aurora_fwd_replica_select_stmt_count |
Count (カウント) | このリーダー DB インスタンスから転送された SELECT ステートメントの合計数。 |
– |
Aurora_fwd_replica_select_stmt_duration |
マイクロ秒 | このリーダー DB インスタンスから転送された SELECT ステートメントの合計期間。 |
転送されたトランザクションとクエリの識別
information_schema.aurora_forwarding_processlist
テーブルを使用して、転送されたトランザクションとクエリを識別できます。このテーブルの詳細については、「information_schema.aurora_forwarding_processlist」を参照してください。
次の例は、ライター DB インスタンス上のすべての転送された接続を示しています。
mysql> select * from information_schema.AURORA_FORWARDING_PROCESSLIST where IS_FORWARDED=1 order by REPLICA_SESSION_ID; +-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+----------------------+----------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | IS_FORWARDED | REPLICA_SESSION_ID | REPLICA_INSTANCE_IDENTIFIER | REPLICA_CLUSTER_NAME | REPLICA_REGION | +-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+---------------------------------------+ | 648 | myuser |
IP_address:port1
| sysbench | Query | 0 | async commit | UPDATE sbtest58 SET k=k+1 WHERE id=4802579 | 1 | 637 | my-db-cluster-instance-2 | my-db-cluster | us-west-2 | | 650 | myuser |IP_address:port2
| sysbench | Query | 0 | async commit | UPDATE sbtest54 SET k=k+1 WHERE id=2503953 | 1 | 639 | my-db-cluster-instance-2 | my-db-cluster | us-west-2 | +-----+----------+--------------------+----------+---------+------+--------------+--------------------------------------------+--------------+--------------------+---------------------------------+----------------------+----------------+
転送側のリーダー DB インスタンスで、SHOW PROCESSLIST
を実行することにより、これらのライター DB 接続に関連するスレッドを確認できます。ライターの REPLICA_SESSION_ID
の値、637 と 639 は、リーダーの Id
値と同じです。
mysql> select @@aurora_server_id; +---------------------------------+ | @@aurora_server_id | +---------------------------------+ | my-db-cluster-instance-2 | +---------------------------------+ 1 row in set (0.00 sec) mysql> show processlist; +-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+ | 637 | myuser |
IP_address:port1
| sysbench | Query | 0 | async commit | UPDATE sbtest12 SET k=k+1 WHERE id=4802579 | | 639 | myuser |IP_address:port2
| sysbench | Query | 0 | async commit | UPDATE sbtest61 SET k=k+1 WHERE id=2503953 | +-----+----------+--------------------+----------+---------+------+--------------+---------------------------------------------+ 12 rows in set (0.00 sec)