[pgsql-jp: 42079] Re: リカバリモードでの起動に1分以上かかる原因についてご教授ください

Tomoaki Sato sato @ sraoss.co.jp
2021年 7月 12日 (月) 04:14:17 UTC


佐藤です。

> はじめまして
> 谷口と申します。
> 
> よろしくお願いいたします。
> 
> 現在、PostgreSQL 12を使って
> ストリーミングレプリケーションを構成しており、
> スタンバイの昇格後に、
> 降格したプライマリをリカバリモードで起動したときに
> 起動に1分以上かかる現象が発生しております。
> 
> これについて考えられる原因をご教授いただけないでしょうか。

WAL ファイルの数はたいして多くないとのことですが、普通に考えると、WAL
適用に時間がかかったためだと思います。ログを確認し、WAL 適用がいつ完了
したかを見れば、切り分けができると思います。

最近では、Slack で聞いたほうが、反応があるかもしれません。

  https://slofile.com/slack/postgresql-jp

> 【環境】
>  ー 2サーバ(プライマリ - スタンバイ)の
>    ストリーミングレプリケーション構成
>    非同期=synchronous_standby_namesなし
>  ー いずれのサーバも以下のスペック
>    CPU  :4
>    メモリ :64GB
> 
> 【手順】
>  1.プライマリで下記設定のもとDB更新を行う
>    max_wal_size = 1GB (デフォルト)
> 
>    DB更新が高頻度であったため、チェックポイントが多発し、
>    max_wal_sizeを大きくする旨の警告が表示されました
> 
>  2.プライマリでpg_ctl stop -m immediate
> 
>  3.スタンバイでpg_ctl promote → 新プライマリに昇格
> 
>  4.旧プライマリで pg_basebackup を実行し
>    新プライマリからバースバックアップを取得
> 
>  5.リカバリモードでpg_ctl start
>    → 1分以上後にタイムアウトが発生しました(pg_ctlの仕様)
>      起動はバックグラウンドで徐々に進行し、最終的には起動が完了
>      しました。
>      このとき、walは20ファイル程度であったことを確認
> 
> 【推測】
>  リカバリモードでのwalからのトランザクションの組み立てに時間を要して
>  いるのかもしれません。
>  しかし、walのファイル数はそれほど大量ではなく
>  タイムアウトが発生した原因であると断定できません。


----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan


pgsql-jp メーリングリストの案内