質問:ホットスタンバイモードでスレーブ(スレーブロールはレポーティングDBサーバ)にWALアップデートが適用されている間に長時間実行されるクエリ(30秒以上) ?現在動作している方法は、長時間実行しているクエリを殺すように下のパラメータを設定するか、WALの更新を適用できるか、WALの更新を無期限に延期して適用するクエリが実行されなくなるまでです。私たちは両方を持つことができますか?長い実行クエリとWAL更新が同時に適用されていますか?Postgresホットスタンバイおよびスレーブでの長時間実行クエリ
ケース実装:現在、ホットスタンバイモードを使用して、1つのマスターから1つのスレーブへの変更を同期します。スレーブの役割は、クエリが絶え間なく同時に実行されているレポートDBサーバーです(ms単位で、数秒単位で、数分で )。スレーブでアクティブなクエリが実行されていないというギャップはほとんどありません。
max_standby_archive_delay = -1 # max delay before canceling queries
max_standby_streaming_delay = -1 # max delay before canceling queries
し、リストメーリングリストはpostgresで我々に似てアーカイブされたメールの質問を見て:
http://www.postgresql.org/message-id/[email protected]
我々は、ホットスタンバイの長いクエリを許可するために、これらの2つのparamsを調整しています
クエリの実行中に スレーブにWAL更新が適用されないようにするという考え方を理解しています。しかし、MVCCを使用して、 WALアップデートが適用されている間に、スレーブ(長時間実行、30秒+)のアクティブクエリが の読み取り/書き込みを1つのバージョン/スナップショットから実行できると思ったので、 以降のクエリはWALそのWALトランザクションが がコミットされたときに更新されます。私はPostgreSQLで使用されているMVCCモデルを完全には消化していませんが、 [https://devcenter.heroku.com/articles/postgresql-concurrency]だから、これは です。テーブルが削除されても/WALの更新中に切り捨てられても、現在の実行中のクエリはそのまま動作するはずです。クエリしているテーブルのバージョン/スナップショット を使用していますか?
概要:とにかくあります(でも、サードパーティの拡張機能で)私たちはマスターからスレーブ を同期すると、任意の実行時間のせるクエリを継続しながら、マスターからこれらの更新がすぐに スレーブに適用することができスタンバイ/スレーブで完了するまで実行すると になりますか? Hot Standbyでそれができない場合は、 この状況で何をお勧めしますか?我々のシナリオでは、WAL 更新が適用される時間はほとんどなくなり、クエリが常に同時に実行されている がポストグルに当たっている( ミリ秒のうちのいくつかは秒単位で、数分単位で数えられます)。 Bucardoを使用しましたが、 のデータベース以外の40以上のデータベースも含めて、 のビューを含む200以上のテーブルが同期されているため、このシナリオでは の選択肢がありません。
ご協力いただければ幸いです。
ありがとうございました!
は上のスポット!うまくいけば、これは他の人に役立ちます**データベース/サーバーを再起動することを忘れないでください! (たとえば、RDSを実行している場合)** – Volte