Database Support Blog

  • PostgreSQL
  • EDB
2016.12.01

【SR+HS環境の落とし穴】スタンバイのリカバリに必要なWALが上書きされる障害の予防策

【SR+HS環境の落とし穴】スタンバイのリカバリに必要なWALが上書きされる障害の予防策

PostgreSQL9.0以降でStreaming Replication + Hot Standby(SR+HS)が本体に組み込まれてから、「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージに関するお問い合わせを多数いただくようになりました。

このメッセージは、SR+HS環境においてプライマリがスタンバイにWALレコード(更新履歴)を送信しようとした時に、プライマリのpg_xlog配下に対象のWALが存在しなかった場合などに出力されます。

アーカイブWAL運用を行っていない環境で本メッセージが発生した場合、スタンバイ側で同期を取るために必要なプライマリ側の更新内容を適用することができないため、SR+HSを再構成する必要があります。

そこで、今回は「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージ発生の予防策についてご紹介します。


SR+HSとは

SR+HSとは、PostgreSQL9.0以降で本体に組み込まれたレプリケーション機能であるSRと、WALの適用中にクエリの実行を可能にする機能であるHSを組み合わせた冗長構成のことです。プライマリのWAL Senderプロセスが、スタンバイのWAL ReceiverプロセスにWALレコードを送信し、スタンバイでWALレコードが適用されることでプライマリとスタンバイの同期が取られます。

SR+HSの詳細については、 マニュアル もご参考ください。


「FATAL: requested WAL segment <WALセグメント名> has already been removed」発生の予防策

WALセグメントは循環利用されますが、スタンバイのリカバリに必要なWALセグメントは削除されないよう保持しておく必要があります。予防策として3つの方法がありますが、アシストでは、WALセグメントをプライマリで確実に保持できる方法を推奨します。

PostgreSQL 9.4以降なら レプリケーションスロット を使用する方法、PostgreSQL 9.3以前ならアーカイブモードを有効にする方法をお薦めしています。


レプリケーションスロットを使用する(PostgreSQL 9.4以降の場合)

レプリケーションスロット を使用することで、スタンバイが必要としているWALレコードを含むWALセグメントがプライマリで保持されるようになります。そのため、リカバリに必要なWALセグメントが消されてしまうことを防げます。


アーカイブモードを有効にする

プライマリでアーカイブモードを有効にして、スタンバイのPGDATA/recovery.confに restore_command パラメータを設定することにより、スタンバイのリカバリに必要なWALレコードがプライマリのPGDATA/pg_xlog配下から無くなってもアーカイブWALから補完できるため、本メッセージの発生を予防できます。


wal_keep_segmentsに十分な値を設定する

pg_xlogディレクトリに保持しておくWALセグメント数の最小値を設定する wal_keep_segments に、スタンバイのリカバリに必要なWALレコードを含むWALセグメントを保持できるくらい大きな値を設定することにより、本メッセージの発生を予防できます。ただし、お客様環境によってマシンの性能や処理量が異なるため、一概にwal_keep_segmentsに設定すべき設定値を紹介することはできません。 トライアンドエラーで本メッセージの発生を予防するために十分な設定値を見積もる必要があります。


まとめ

今回は、「FATAL: requested WAL segment <WALセグメント名> has already been removed」のメッセージ発生の予防策について紹介しました。この記事で紹介した予防策を実施することでスタンバイのリカバリに必要なWALレコードを含むWALセグメントをプライマリで保持することができ、本メッセージの発生を予防できますので、まだ予防策を実施されていない方はぜひこの機会に設定してみてください。



■本記事の内容について
 本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2025.04.16

PostgreSQLの拡張機能「system_stats」のご紹介

EDB社が提供するPostgreSQLの拡張機能「system_stats」はPostgreSQL ユーザーがパフォーマンス問題に取り組む際の非常に強力なツールになります。SQLクエリでOS情報を取得できるため、DBエンジニアにとってはパフォーマンスの監視が格段に簡単になります。テストした結果をご紹介します。

  • EDB
  • PostgreSQL
2025.03.10

意外な落とし穴!アプリケーション⇒DBデータ型によるパフォーマンス影響

PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます

  • EDB
  • PostgreSQL
2024.09.12

新ツール Postgres Workload Report によるパフォーマンス診断~データベース管理の未来を共に創る!~

EDB Postgres Workload Reportsは、Postgresデータベースのパフォーマンス診断とトラブルシューティングを強化する新しいツールです。OracleのAWRに似た詳細なレポートを提供し、データベースの問題を迅速に特定・解決できるようサポートします。本記事では概要と利用手順をご紹介します。

ページの先頭へ戻る