読み込み設定 (read preference) maxStalenessSeconds
レプリカセット ノードは、ネットワークの競合、ディスク スループット、操作の長時間実行などの理由で、 プライマリよりも遅れる可能性があります。 読み込み設定(read preference maxStalenessSeconds
オプションを使用すると、セカンダリからの読み取りの最大レプリケーションラグ、つまり「古さ」を指定できます。 セカンダリの推定される古さがmaxStalenessSeconds
を超えると、クライアントは読み取り操作にそのセカンダリを使用することを停止します。
重要
maxStalenessSeconds
読み込み設定(read preference)オプションは、セカンダリから読み取り、プライマリの書込み(write)を複製する際に大幅に遅延したセカンダリからの読み取りを避けたいアプリケーションを対象としています。 たとえば、セカンダリとプライマリ間のネットワーク停止が原因で、レプリケーションが停止する場合があります。 その場合、管理者が停止を解決し、セカンダリが追いつくまで、クライアントはセカンダリからの読み取りを停止する必要があります。
注意
MongoDB バージョン 4.2 以降では、 の遅延を指定された最大値以下に抑えることを目的として、プライマリが書込み (write) を適用するレートを制御するためのmajority
committed
フロー制御 メカニズムが導入されています。
次の読み込み設定(read preference)モードでmaxStalenessSeconds
を指定できます。
Max staleness はモード と互換性がありません。また、読み取り操作でセットの セカンダリprimary
メンバーを 選択 した場合にのみ適用されます。
maxStalenessSeconds
を使用して読み取り操作にサーバーを選択する場合、クライアントはセカンダリの最後の書込み (write) をプライマリの最後の書込み (write) と比較して、各セカンダリがどれだけ古くなっているかを推定します。 クライアントはその後、推定されるラグがmaxStalenessSeconds
以下のセカンダリに読み取り操作を送信します。
プライマリが存在しない場合、クライアントは比較のために最新の書き込み (write) を持つセカンダリを使用します。
デフォルトでは、最大の古さはなく、クライアントは読み取り操作の送信先を選択するときにセカンダリの遅延を考慮しません。
90 秒以上のmaxStalenessSeconds
値を指定する必要があります。 maxStalenessSeconds
値が小さいとエラーが発生します。 クライアントは、各レプリカセット ノードの最新の書込み (write) 日を定期的にチェックすることで、セカンダリの古さを推定します。 このようなチェックは頻繁に行われないため、古さの推定値は大きくなります。 したがって、クライアントは 90 秒未満のmaxStalenessSeconds
値を強制できません。