PostgreSQL をソースとして使用する AWS DMS タスクが、レプリケーションスロットすべてが使用中のために失敗するのはなぜですか?

所要時間1分
0

PostgreSQL DB インスタンス用の Amazon Relational Database Service (Amazon RDS) を使用する AWS Database Migration Service (AWS DMS) タスクがあります。このタスクの実行に失敗したときに、すべてのレプリケーションスロットが使用中で、エラーメッセージが表示されます。

簡単な説明

Amazon RDS for PostgreSQL インスタンスでは、AWS DMS はネイティブレプリケーションスロットを使用して、変更データキャプチャ (CDC) のための論理レプリケーションを実行します。

PostgreSQLインスタンスにあるレプリケーションスロットの数は、max_replication_slots パラメータによって制御されています。RDS for PostgreSQL インスタンスにあるレプリケーションスロット数は、デフォルトでは 5 つです。レプリケーションスロット数が最大数を超えると、次のようなログエントリが表示されます。

メッセージ
[SOURCE_CAPTURE ]E: Failed (retcode -1) to execute statement [1022502] (ar_odbc_stmt.c:2579)
[SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 53400 NativeError: 1 Message: ERROR: all replication slots are in use;

これらのエラーを解決するには、使用済みのレプリケーションスロットを削除するか、max_replication_slots パラメータの値を増やします。

解決策

使用済みレプリケーションスロットの削除

使用済みのレプリケーションスロットは引き続きスペースを占有します。複数の AWS DMS タスクを実行している場合、または同じ DB インスタンスで古いタスクを実行している場合は、使用済みのレプリケーションスロットを削除します。

まず、レプリケーションスロットの最大数を確認します。次に、使用済みのレプリケーションスロットを削除します。

次のクエリを実行して、レプリケーションスロットの最大数を確認します。active 列を確認して、未使用のレプリケーションスロットを特定します。

SELECT * FROM pg_replication_slots;
     slot_name    |    plugin     | slot_type | datoid | database | active |  xmin  | catalog_xmin | restart_lsn
 -----------------+---------------+-----------+--------+----------+--------+--------+--------------+-------------
old_and_used_slot | test_decoding | logical   |  12052 | postgres | f      |        |          684 | 0/16A4408

**注:**active: t (true) はスロットが使用中であることを意味し、active: f (false) はスロットが使用されていないことを意味します。

次のクエリを実行して、未使用のレプリケーションスロットを削除します。

SELECT pg_drop_replication_slot('old_and_used_slot');

注: old_and_used_slot を削除するレプリケーションスロットの名前に置き換えます。

未使用のレプリケーションスロットを削除したら、タスクを再開します。

max_replication_slots パラメータの値を増やす

RDS DB インスタンスにアタッチされているカスタム DB パラメータグループの DB パラメータを変更します。次に、max_replication_slots パラメータの値を増やします。これは静的パラメータであるため、パラメータ値を変更した後は、必ず DB インスタンスを再起動する必要があります。その後、タスクを再開します。

関連情報

論理レプリケーションを使用した変更データ キャプチャ (CDC) の有効化

Amazon RDS for PostgreSQL

Using a PostgreSQL database as an AWS DMS source

PostgreSQL Web サイトの Logical decoding examples

コメントはありません

関連するコンテンツ