web-dev-qa-db-ja.com

Postgres 9.4 wal_level = logicalはディスク容量を増やします

AWS Database Migration Serviceを使用して、RDS PostgresインスタンスからAurora MySQLインスタンスにデータを移行しようとしています。

Database Migration Serviceでは、ソースPostgres DBでwal_levellogicalとして設定する必要があります。しかし、完了すると、Postgresはインスタンスが使用できなくなるまで、多くのディスク領域を消費し始めました。

WALログはどのくらいの期間保持されますか?ディスクスペースの使用が制限されるように有効にできる他の設定はありますか?

4
Aravindan R

これはAWS DMSの問題です。

DMSは最近、PostgreSQLソースからのレプリケーション用の機能WALハートビート[1](ダミークエリを実行)を追加したため、アイドル状態の論理レプリケーションスロットが古いWALログを保持しないため、ソースでストレージがフルになる可能性があります。このハートビートは、restart_lsnを動かし続け、ストレージがいっぱいになるシナリオを防ぎます。

  1. DMSコンソールにログインします。
  2. ソースエンドポイントに関連するすべてのタスクを停止します
  3. 左側の選択ペインから「エンドポイント」をクリックします。
  4. タスクに従って、使用しているソースエンドポイントを選択します。
  5. 画面上部の「変更」をクリックします。
  6. 「詳細」を展開します。
  7. 追加の接続属性の下に、これを追加してください:

    heartbeatenable = Y; heartbeatFrequency = 1

HeartbeatEnable – trueに設定(デフォルトはfalse)HeartbeatSchema –ハートビートアーティファクトのスキーマ(デフォルトはpublic)HeartbeatFrequency –分単位のハートビート頻度(デフォルトは5、最小値は1)

  1. 「変更」をクリックします。エンドポイント画面に自動的にリダイレクトされます。
  2. エンドポイントを再度選択し、「テスト接続」をクリックします。
  3. テストが自動的に開始されます。 「成功」と表示されるまで待ちます。

タスクを単独で停止してもレプリケーションスロットはクリアされないため、タスクが停止状態の場合でもストレージの使用量は増加します。スロットをクリアするには、タスクを削除する必要があります。

レプリケーションスロットをクリアするには、次のコマンドを使用します-

SELECT * FROM pg_replication_slots ; --finds all replication slots
select pg_drop_replication_slot('NameOfSlot'); -- you will get the name of the slot from the first command

参照:[1] PostgreSQLソースWALハートビート https://docs.aws.Amazon.com/dms/latest/userguide/CHAP_ReleaseNotes.html#CHAP_ReleaseNotes.DMS2

4
Aravindan R