’Appendix A

BDR 3.7.12

これはBDR 3.7のメンテナンスリリースであり、以前のバージョンで特定された問題の修正とマイナー改善が含まれています。

BDRにも影響する解決済みの問題については、pglogical 3.7.12のリリースノートも確認してください。

改善

  • キャッシュとロックの改善による単一デコードパフォーマンスの調整(BDR-1311、 BDR-1312) BDRのキャッシュを追加-デコードに関する内部カタログ情報 労働者。単一のグローバルロックをマルチプルのロックに分割します(WALごとに1つ WAL送信者の内部ステータス情報へのアクセス用。 これにより、特に多くの同時WAL送信者のパフォーマンスが向上します プロセス。

  • 新しいビューbdr.replication_statusを追加します(BDR-1412) これはビューpglogical.replication_statusに似ており、 ローカルノードのレプリケーションステータスに関する情報 クラスター内の他のすべてのBDRノードを尊重します。

  • ウォルセンダーのデコーダーモニタリングパラメーターを追加 WAL送信者統計を拡張して、LCRを使用するかどうかをレポートする デコードワーカーと正確なLCRファイルによって出力される 該当する場合、現時点で読み取ります。

  • CAMOをデコードワーカーと組み合わせて使用しないようにします(BDR-792) 現在、これらの機能を組み合わせて使用することはできません。このリリース 多くの場合、両方を有効にできません。これはただ 設定ミスを防ぐためのベストエフォート戦略。

  • bdr_init_physicalのpostgresql.auto.confファイルの指定を許可(RT72989、 BDR-1400) コマンドライン引数をbdr_init_physicalに追加して、 postgresql.auto.confに使用するカスタムファイルを提供します。

解決された問題

  • bdr_init_physicalの潜在的なデータロスの問題を修正(RT71888) スロット名前を再利用すると、以前の状態が適切にクリーンアップされませんでした すべての場合。これにより、物理的的にデータロスれる可能性があります スロットはbdr_init_physicalによって事前に作成されるため、結合します 同じ名前で。物理的からロジカルへの移行 レプリケーションはレプリケーションストリームのパートを見逃す可能性があります。 スロットを再作成します。このリリースはスロットを適切にクリーニングします 情報をドロップすると、データロスを防ぎます。

  • bdr.camo_local_mode_delayを修正して、実際に起動します(BDR-1352) この人為的な遅延により、そうでないCAMOノードを調整できます 現在CAMOパートナーに接続して、生産を防止しています CAMOパートナーが適用できるよりも速いトランザクション。で 以前のバージョンでは、後に適切に起動しませんでした bdr.global_commit_timeout量のラグ、ただし1000回のみ 後で(誤って秒とミリ秒を比較したため)。

  • サードパーティの出力プラグインと組み合わせたセグメンテーション違反の防止(BDR -1424、RT72006) BDRのEager Allに固有のロジカルWALメッセージのハンドリングを調整する BDRとは無関係の出力プラグインのノード複製モード。これ 例、 Debeziumのdecoderbufs出力プラグインが機能するようにします BDRとともに。

Postgres 13との互換性を改善( BDR-1396) ReplicationSlotAcquireのAPIの変更に合わせて調整してください。 非ブロッキングが要求された場合の意図しないブロッキングへ、およびその逆 その逆。 PGLogicalのこのバージョンは、この潜在的な問題を排除し、 これは稼動システムではこれまで観察されていません。

  • コミット決定を含むRaftスナップショットのシリアル化を修正(CAMO、 BDR-1454) タプル数の不一致がシリアル化につながる可能性があります または後に撮影されたRaftsnapshotの逆シリアル化エラー CAMOまたはEager All Nodeレプリケーションを使用したトランザクションが使用されました 最近、コミット決定を保存しました。

  • bdr_init_physicalの--recovery-confオプションを修正

アップグレード

このリリースでは、次のバージョンのBDRからのアップグレード処理がサポートされています。

  • 3.7.9以降

  • 3.6.27

BDR 3.7.11

これはBDR 3.7のメンテナンスリリースであり、以前のバージョンで特定された問題の修正とマイナー改善が含まれています。

BDRにも影響する解決済みの問題については、pglogical 3.7.11のリリースノートも確認してください。

改善

  • デコードワーカーのデバッグログを削減( BDR-1236、 BDR-1239)

  • コンセンサスの最大接続の構成を許可(BDR-1005) これにより、非常にラージクラスターをセットアップできます。

解決された問題

  • autopatitionおよびエクゼキュータのsnapshotハンドリングを修正 PostgreSQLの最新バージョンとの互換性のため

  • CAMOのデッドロックハンドリングを修正 これにより、クロスCAMOでの競合の解決が非常に遅いという問題が解決します セットアップ。

  • 競合をロギングするときにスロットタプルのコピーを取得します( BDR -734) そうしないと、行を早期にマテリアライズして、存在するときに誤った更新を引き起こす可能性があります 下流の追加の列の。

  • LCRセグメント削除ロジックの改善(BDR-1180、 BDR-1183、 BDR-993、 BDR-1181) 間のより小さいすべてのLSNのLCRセグメントを保持することを確認してください グループスロットLSNおよびデコードワーカースロットLSN。

  • 内部コネクションプーラへの同時接続のハンドリングを修正 プールの所有者(コンセンサスワーカー)がリストを再作成しています(BDR-1113)

アップグレード

このリリースでは、次のバージョンのBDRからのアップグレード処理がサポートされています。

  • 3.7.9以降

  • 3.6.27

BDR 3.7.10

これはBDR 3.7のメンテナンスリリースであり、以前のバージョンで特定された問題の修正とマイナー改善が含まれています。

改善

  • bdr.monitor_group_raft()のラフトクォーラムを確認(BDR-960) 少なくとも次の場合、bdr.monitor_group_raft()に「CRITICAL」ステータスを返します 投票ノードの半分は到達不能です。

  • bdr_monitorロールが追加の情報ビューを読み取ることを許可します。 (BDR-732)

  • bdr.group_camo_details

  • bdr.group_versions_details

  • bdr.group_raft_details

  • bdr.group_replslots_details

  • bdr.group_subscription_summary

  • is_decoder_slotをbdr.node_slotsに追加して、

    • デコーダーワーカー

解決された問題

  • ポストマスターが死亡した場合、コンセンサスワーカーを常に終了させる(BDR1063、RT70024)

  • リスタート後のデコードワーカーのLSNの開始を修正 デコードワーカーが再起動すると、既存のLCRセグメントをスキャンして検索します LSN、それまでのトランザクション、完全にデコードされます。このLSNが スロットの確認済みのLSNよりも高い場合、デコードする前にスロットを更新します トランザクション。これにより、トランザクションがマルチプルデコードおよび複製されることを回避できます。 回。 (BDR-876、RT71345)

  • 物理的スタンバイのデコードワーカーのレプリケーションスロットを同期しない WALデコーダーが初めて起動するとき、デコードワーカーのスロットには すべてのWALセンダスロットの背後にあるため、必要なWALをデコードします。 WAL送信者。しかし、プライマリのスロットはすべてのWAL送信者よりも先に移動しました そのため、同期化は役に立ちません。それは物理的後に新しく作成されます スタンバイが昇格されます。 (BDR-738)

  • デコードワーカーが有効な場合の結合パフォーマンスの改善 fsync = onの場合、新しいノードをクラスターに参加させるには、 デコードワーカーが有効になりました。また、 ノードビルドアップは、 結合のソース。これは、デコードワーカーがLCRセグメントを同期したためです。 頻繁に。頻度を減らすことで問題を修正しました。 ( BDR-1160、 RT71345)

  • デコードワーカーが使用されている場合のUPDATE / UPDATE競合のTOASTハンドリングを修正

  • デコードワーカーが使用されている場合の追加オリジンのフィルタリングを修正 これは主に、 BDRとデコードワーカーおよび個別のpglogicalの混合に影響します レプリケーション。

  • bdr.raft_leadership_transferのハングの可能性を排除(BDR -1039) wait_for_completionとの組み合わせで、ベストエフォートアプローチは オリジナルのリクエストが適切に送信された場合の無限ループへ、 しかし、実際のリーダーシップの移転は依然として失敗しました。

  • PGLマネージャがワーカーをスタートできないときにエラーをスローしない(RT71345) PGLマネージャがエラーをスローした場合、再起動されます。責任があるので ノードの状態と他のBDR管理タスクを維持するため このようなエラーで再起動すると、 BDRクラスターの状態に影響します。 代わりに、警告をログします。

  • 結合中のrepset構成ハンドリングをより決定的にします(RT71021) autoadd_tablesオプションは、以前のすべてのケースで尊重されるとは限りません。

  • bdr.node_summaryのpub_repsetsおよびsub_repsetsを廃止(BDR-702、RT70743) 偽の情報ではなく、常にNULLと表示されるようになり、完全に削除されます 次のメジャーバージョンで。

  • オリジンノードとターゲットノードが含まれる場合、bdr.node_slotsにノードとグループの情報を表示 異なるグループ。

  • bdr.monitor_local_replslots()がスタンバイノードを理解し、 加入者専用グループ構成であり、スロットはチェックされません これらの状況では必要ありません(BDR-720)

  • フリー接続スロットを再利用しない可能性のある内部コネクションプーラを修正( BDR-1068)

  • 不足している列のエラーメッセージで報告されたスキーマ名前を修正( BDR-759)

BDR 3.7.9

改善

  • グループスロットを返すbdr.local_group_slot_name()ファンクションを追加 名前(BDR-931) 主にモニタリングに役立ちます。

BDRワーカーに関する追加情報を表示するbdr.workersビューを追加します ( BDR -725) BDR固有のアクティビティのモニタリングを支援します。特に参加時に有用 bdr.stat_activityを使用します。

  • 転送されたトランザクションのロジカルスタンバイでの並列適用を許可( BDR-852) 以前は、レプリケートされた変更にのみ並列適用を使用できました。 ロジカルスタンバイのアップストリームから直接、ただし変更なし 別のノードから来ます。

  • bdr.batch_inserts構成変数の導入(RT71004、RT70727) これは、(同じトランザクション内の)同じテーブルにいくつの行が入った後に設定します BDRはマルチ挿入戦略にスイッチます。

    • これにより、通常、INSERTsまたはCOPYコマンドを使用して、ラージのデータのレプリケーションのパフォーマンスが向上します。ただし、 BDR 3.7.8は常にこの戦略を使用しようとするため、多くの単行の挿入のみを行うワークロードのパフォーマンスが低下します。

解決された問題

  • ノードパート/ドロップでWALデコーダーインフラストラクチャを破棄します(BDR-1107) これにより、ノードが次の場合にWALデコーダーインフラが削除されます。 クラスターから分離されました。 LCRディレクトリと同様に、 デコーダースロット。これにより、ノードがクラスタに再びきれいに結合できるようになります 後で、必要な場合。

  • サブスクライバー専用ノードでWALデコーダーをスタートしないでください( BDR-821) サブスクライバー専用ノードは、変更を他のノードに送信しません クラスター。したがって、WALデコーダーインフラおよびWALデコーダーは必要ありません プロセス自分自身。これを修正すると、加入者のみが ノードは未使用のスロットのためWALを抑制しません。

  • PROMOTE状態に達した後にのみWALデコーダーを起動します(BDR-1051) ノードが結合を開始するときに、WALデコーダーインフラストラクチャを作成していました プロセス。それは早すぎて、WALの蓄積につながる可能性があります ロジカルスタンバイ。代わりに、WALデコーダーインフラストラクチャを作成します ノードがPROMOTE状態に達したときのみ。それが他のときの状態です ノードはノードへの接続をスタートする可能性があるため、WALデコーダーが必要です。

  • サブスクライバーのみのノードでのグループスロットアドバンスの修正(BDR-916、 BDR-925、RT71182) これにより、サブスクライバーのみのノードでの過剰なWALログ保持が解決されます。

  • を使用して加入者専用ノードに参加するときに正しいスロット名前を使用する bdr_init_physical( BDR-895、 BDR-898、RT71124) bdr_init_physicalが間違ったスロットを作成するために使用されたため、2スロットになりました 加入者専用ノードが次を使用して参加されたときに、結合ソースノードに存在する このメソッド。これにより、結合ソースに過剰なWALが保持されます。 ノード

  • グループモニタリングビューを修正して、ノードごとに複数の行を許可する( BDR-848) グループモニタリングビューは、以前に任意のノードから情報を切り捨てました 複数行の情報を報告します。これにより、例 bdr.group_replslots_detailsにスロットがありません。

  • CAMOの正しいコミットキャンセル(BDR-962() これにより、ユーザがクエリーをキャンセルしたときのCAMOの動作が再び修正されます。

  • レシーバのリスタート後にグローバルロックカウンターの状態を復元する( BDR-958) すでにロックを復元しましたが、原因となる可能性のあるカウンターは復元していません 並列適用を使用する場合、グローバルロック中にデッドロックが発生します。

  • マルチプルある場合のskip_transaction競合リゾルバのハンドリングを修正 skip_transactionを引き起こしたトランザクションの後のトランザクションの変更(BDR-886)

  • 自動パーティションテーブルのRaftsnapshot作成を修正(RT71178、 BDR-955) 以前は、Raftsnapshotは自動パーティションの状態をアカウントしていませんでした 情報を書き込むときのすべてのノードでのタスク。これにより、 長時間のダウンタイムの後、ノードはパーティション作成をスキップします。

  • 自動パーティションでトランザクションとsnapshotのハンドリングを調整します(BDR-903) これにより、自動パーティション処理中に有効なsnapshotが使用されます 回。以前のアプローチは、将来のポイントリリースで問題を引き起こす可能性があります PostgreSQLの。

  • 自動パーティションでのKSUUID列の検出を修正

  • bdr.drop_node()ファンクションによるノードステータスの誤報告を修正

  • 正しいシーケンスタイプが常にグローバルgallocに設定されていることを確認してください シーケンス状態。

  • いくつかのコマンドのDDLレプリケーションとロック管理を修正(BDR-874) ANALYZE、CHECKPOINT、CLUSTER、PREPARE / COMMIT / ABORT TRANSACTION、 MOVE、RELEASE、ROLLBACKは複製されたものとして文書化されており、これらのいくつかは すべきではないDDLロックを取得しようとしました。

  • 複製されていないユーティリティコマンドのロギングを削減( BDR-874) PREPAREとEXECTUEは、誰としても複製されないことについてspamする必要はありません。 彼らがいることを期待しています。

  • ALTER TABLE ... SETのグローバルロックを修正(BDR-653) グローバルDMLロックを取得しないでください。

  • TRUNCATEコマンドの複製方法文書を修正(BDR-874) TRUNCATEはグローバルロックを取得できますが、他の方法では複製されません DDLコマンドは、レプリケーションセットに従って、DMLのように複製されます 設定。

  • CAMOとEagerが現在、Decoding Workerで動作しないことを文書化(BDR-584)

  • ドキュメントの複数のタイポと文法の修正。

BDR 3.7.8

これは、 BDR 3.7の最初の安定(stable)リリースです。 3.7.7で特定された問題の新しい主要機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

このリリースでは、 BDR 3.6.25および3.7.7からのアップグレードがサポートされています。

BDR 3.7のハイライト

PostgreSQL 11、12、および13のサポート

EDB Advanced Serverのサポート Standard EditionとEnterprise Editionの両方が使用可能になりました EDB Advanced Server

  • 並列適用 レプリケーションを適用する並列ライターの数を構成できます ストリームこれは、Enterprise Editionでのみサポートされる機能です。

  • 自動パーティション 自動作成により、テーブルパーティションの自動管理が可能になり、 設定可能な保持期間などを備えた自動クリーンアップ。

BDR WALデコードワーカーを分離するオプションを導入 これにより、数に関係なく、各ノードで単一のデコードプロセスを使用できます。 それに接続されたサブスクリプションの。 デコードされた情報は、ロジカル変更レコード(LCR)ファイルに保存されます。 従来のWALと同様の方法で他のノードにストリーミングされます。 デコードとwalsenderのオプションの分離。 これは、Enterprise Editionでのみサポートされる機能です。

  • subscriber-onlyノードの概念を実装する これらは完全に結合されたノードですが、レプリケーションを送信しません クラスター内の他のBDRノードへの変更。しかし、彼らは変更を受け取ります クラスター内のすべてのノードから(もちろん、他のサブスクライバーのみを除く ノード)。彼らはRAFT投票プロトコルに参加していないため、 彼らの存在(または不在)はRAFTリーダーの選挙を決定しません。 これらのノードにはレプリケーションスロットを作成する必要はありません。 レプリケーションの変更を送信しないでください。同様に、何も作成する必要はありません 他のBDRノード上のこれらのノードのサブスクリプション。

  • CREATE TABLE ... ASおよびSELECT INTOステートメントをサポート

    • この機能は、Enterprise Editionでのみサポートされるようになりました。

  • 物理的表現を改善するオーダーにBDRサブグループを定義する新しい機能 BDRクラスターの構成。 これにより、 BDRクラスターが分散している構成も簡素化されます。 マルチプルのデータセンターとデータベースのパートのみが複製されます 各サブグループが新しいデフォルトのレプリケーションを自動的に持つデータセンター それに割り当てられたセット。

  • 複数の新しいモニタリングビュー 主にグループレベルのモニタリングと進行中のモニタリングに焦点を当てています 適用側。

  • 競合はデフォルトでbdr.conflict_historyに記録されます 行単位セキュリティを使用してパーティションテーブルにログを記録し、簡単に アプリケーションユーザーの競合へのアクセス。

  • 新しい競合タイプmultiple_unique_conflictsおよびapply_error_ddl よりエッジケースの状況でレプリケーションを継続できます

  • 一部のDDLステートメントのロックレベルを削減 また、文書化されたロックヘルプは、 他のマルチプルのDDLステートメント。

  • 更新と削除を適用するときに利用可能な最適なインデックスを使用する これにより、REPLICA IDENTITY FULLテーブルのパフォーマンスが大幅に向上します。 プライマリキーがありません。

以下は3.7.7以降の変更点です。

改善

EDB Advanced Server (EE)での並列適用のサポート

  • 必要に応じて進捗レポートの頻度を増やします(BDR-436、 BDR-522) これにより、DMLを使用せずにVALIDATE CONSTRAINTのパフォーマンスを高速化できます。 ロック。

SQLセッションから設定可能なすべてのBDR構成オプションを変更して、 Postgresスーパーユーザだけでなく、bdr_superuserによって設定可能。

  • bdr.run_on_all_nodes()でbdr.ddl_replicationをオフに設定(BDR-445) 通常、DDLを使用して実行されたDDLを複製することは望ましくありません。 すべてのノードですでに実行されているため、bdr.run_on_all_nodes()ファンクション。

  • 適用側で進行中のトランザクションのモニタリングを改善する (BDR-690、 BDR -691) DDLおよびいくつかの追加の適用時にpg_stat_activityにクエリーを追加します 最新の受信のLSNを示すbdr.subscription_summaryビューのフィールド 変更、最新の受信コミットのLSN、コミットLSNの適用、LSNのフラッシュ、および タイムスタンプを適用しました。

    • これは、特にラージトランザクションに関しては、レプリケーションの進行状況をモニタリングのに役立ちます。

  • pg_stat_activityと同様ですが、 BDRを表示するビューbdr.stat_activityを追加します 特定の待機状態。

  • 初期データ同期以外のバッチ挿入を許可する 既存のBDRグループへのビッグデータのロードのパフォーマンスを改善します。

  • DROP INDEXで取得したグローバルロックレベルをDML Global Lockから DDLグローバルロック(BDR-652)

解決された問題

  • いくつかのDDLコマンドのレプリケーション設定を修正 一般makeに、実際の動作と文書化された動作を確認してください 許可されるもの、複製されるもの、 DDL中に保持されるロック レプリケーションマッチ。

例、 TABLESPACE関連のコマンドは複製しないでください。

  • 同時結合の競合条件を修正します。 ( BDR-644、 BDR -645) ローカルノードに既にある場合は、常に最初に有効なサブスクリプションを作成します PROMOTING状態を超えました。

  • すでに保持されているロックのグループリーダーを設定する(BDR-418、 BDR-291) これにより、「グローバルロックタイムアウトによるステートメントのキャンセル」が解決されます。 ライタが既にテーブルを開いていた場合のDDL操作。これは パーティショニングまたは並列適用が関係する場合は特に問題です。

  • WALデコーダー入力に基づいて進行中のWAL送信者のスロット(BDR-567) これがないと、サーバーは最終的に単一のデコードワーカーで動作しなくなる可能性があります。

  • bdr_init_physicalのTEMPORARYレプリケーションスロットに切り替えます(BDR-191) これにより、bdr_init_physicalの実行後に適切にクリーンアップされます。

  • 不要になったXID進行状況レコードをクリーンアップします(BDR-436、 BDR-532) xid progress snapshotのサイズを縮小します。

  • BDRライターでapply_timestampを正しく追跡する( BDR BDR) 3.7.7では更新されませんでした

  • EPASでのBDRストリームトリガーの作成を修正(BDR-581) 以前は、間違ったトリガータイプとして作成されていました。

  • LCRファイルに保存され、walsenderに渡されるオプションのエラーハンドリングを改善 異なる( BDR-551)

  • 最上位ノードグループに対してのみWALデコーダー構成を有効にします(BDR-566) 一般に、トップノードグループのグループ構成の変更のみを許可します。

  • 特定のBDRカタログ列に「C」照合順序または「名前」タイプを使用します( BDR -561) これにより、 BDRカタログの潜在的なインデックス照合順序の問題が解決されます。

  • CAMOの正しいコミットキャンセル これにより、ユーザがクエリーをキャンセルしたときのCAMOの動作が修正されます。

  • 既存のパーティションを持つテーブルの自動パーティションハンドリングを修正(BDR-668)

  • BDRWriteでリモートIDのないリレーションをキャッシュしない( BDR-620) いくつかの形式のTRUNCATEコマンドの後のレプリケーションの破損を修正します。

  • Walデコーダーのアップストリームdbnameを考慮したアップストリームデコーダースロット名前の作成(BDR-460) walデコーダーが使用するスロット名を修正します。

  • WALデコーダーとLCRを使用するWAL送信者が使用する正しいBDR出力オプションを使用する(BDR-714)

  • 壊れたクラスターでのモニタ機能のクラッシュを修正。 ( BDR-580、 BDR-696)

  • bdr.node_slotsビューでPARTEDに存在しないスロットを表示しない

  • ノードのドロップ時にストリームトリガーをドロップ(BDR-692) これにより、ストリームトリガーでbdr_init_physicalを使用できるようになります。

  • SIGUSR2シグナルのハンドリング中にセグメンテーション違反が発生しないようにします シグナルはプロセスのライフタイムのどの時点でも到着する可能性があるmake、 現在の状態に関する仮定。

  • 自動パーティションの欠落につながる可能性のあるテーブルの同時ドロップを処理する ルール

  • 異なるエラーの処理中にエラーが発生してもクラッシュしないことを確認してください

  • バックグラウンドワーカの場合、グローバルxidをクライアントに送信しないでください これを送る人はいません。

その他の変更

  • bdr.permit_unsafe_commandsがオンの場合、セッションレベルのbdr.xact_replication = offを許可 pg_restoreを使用してデータベースに手動でデータを入力するときに役立ちます。

  • さまざまなドキュメントの改善

  • テーブルがレプリケーションセットから削除されている場合、テーブルが 既にrepsetにありません(BDR-562)

  • check_constraintsオプションを再度許可しますが、適切にマークされていることを確認してください 非推奨(BDR-26) BDR 4.0で削除されます。

  • WALデコーダーが有効/無効になっている場合、WAL送信者の管理を マネージャプロセス(BDR-612) コンセンサスワーカーでそれらを管理すると、 コンセンサスサブシステム。

  • より多くの場所で割り込みをチェックします

    • 暴走ループの可能性を減らす必要があります

BDR 3.7.7

これは、 BDR 3.7のベータリリースです。 3.7.6で特定された問題の新しいメジャー機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、 BDR 3.6.25および3.7.6からのアップグレードがサポートされています。

改善

EDB Advanced ServerでEnterprise Edition機能をサポート これは、特にCAMOとEagerレプリケーションを除外します。

EDB Advanced Server DDLコマンドのほとんどをサポート(EBC-45) キューに関連するDDLは複製されますが、キューの内容は複製されることに注意してください。 複製されません。

DDLレプリケーションのハンドリングを調整して、コマンドレベルではなく、 内部表現形式(BDR-275) これにより、主にフィルタリングと文書が容易になります。

  • Enterprise EditionでSELECT INTOステートメントを許可(BDR-306)

  • COPY FROMでBDRシーケンスを処理する(BDR-466) COPY FROMは、列のデフォルトを独自に処理します。 クエリープランナフックで使用されるため、キャッチされません 式プランナ。悲しいことに、式プランナにはフックがありません したがって、実際のCOPY FROMコマンド自分自身を処理する必要があります。

  • bdr.run_on_all_nodesの改善(BDR-326、 BDR-303) 戻り値の型をjsonbに変更し、常に各コマンドのステータスを結果ます。 受信した実際のエラーメッセージを返すことにより、エラー報告を改善します。 リモートサーバ。

  • conflict_historyにさらに情報を追加(BDR-440) これにより、競合履歴テーブルにいくつかの新しいフィールドが追加され、簡単になります。 実際のデータを見なくてもタプルを識別できます。

    • 最初の1つはorigin_node_idで、これはサブスクリプションのオリジンとは異なる可能性のある変更のオリジンを指します。状況によっては、異なるオリジナルのノードから変更を転送するためです。

    • 2つ目はchange_nrで、これはトランザクションの(カウンタに基づく)変更の数を表します。 1つの変更は、1つのオリジナルのコマンドではなく、1つの行を表します。

    • これらは、競合履歴サマリテーブルにも追加されます。

    • local_timeをbdr.conflict_history_summaryに追加しますモニタリングはbdr.conflict_historyのパーティションキーです。これは、クエリを効率的に実行できるようにするために必要です。

  • bdr_init_physicalに–node-group-nameオプションを追加 bdr.join_node_groupのnode_group_nameと同じ-参加を許可します ノードのサブグループ。

  • LCRをWALデコーダースロット(BDR -60)にちなんで名前付けれたディレクトリの下に保存する PglogicalはLCRをレプリケーションスロットにちなんで名前付けたディレクトリに保存します それらを生成するために使用。

  • WALデコーダーと送信者の調整におけるさまざまな改善(BDR-232、 BDR-335、 BDR-342) WALDecoder waitlsnに関する情報を公開し、WALSender その情報を使用して待機し、必要なときにWALDecoderにシグナルを送ります WALが利用可能です。これにより、不要なポーリングが回避され、改善されます 2つのコーディネーター。

  • 単一のデコーダーワーカーGUCオプションの変更。 (BDR-222) bdr.receive_logical_change_recordsをbdr.receive_lcrに変更し、 bdr.logical_change_records_cleanup_intervalからbdr.lcr_cleanup_interval

  • CAMO / EagerコードのほとんどをBDRに移動します(BDR-330) CAMOおよびEager All NodeをPostgresパッチに依存しにくくします。

  • 初期同期の並列化をサポートします。 並列適用が有効な場合、ロジカル結合中の初期同期は 同様に並列化されます。

  • bdr.set_ddl_replicationおよびbdr.set_ddl_lockingを廃止します。

解決された問題

  • bdr_stop_wal_decoder_senders()( BDR -232)のロジックを修正 bdr_stop_wal_decoder_senders()が待機する期間を増やします WAL送信者のステータスを再度確認する前に。

  • 場合によってはALTER TABLE..ADD FOREIGN KEYの実行を許可しない(EBC-38、 BDR-155) 現在のユーザに読み取り権限がない場合 被参照テーブル、ALTER TABLE ADD FOREIGN KEYを許可しない そのようなテーブルに

  • 一時オブジェクトと永続オブジェクトが混在するクエリの検出を改善 そうしないと、レプリケーションを中断する可能性があります。

  • INTO TABLE句を使用する場合のEXPLAINステートメントを修正。

  • ユーティリティコマンドとDMLが混在する場合のbdr.run_on_all_nodes()のクラッシュを修正( BDR-305)

  • EPASの古いマイナーバージョンでのCTASハンドリングを修正

  • テーブル定義チェックの統合(BDR-24) これにより、チェックや作成を見逃してしまういくつかの隠れたバグが修正されます。 余分なオブジェクトの

  • 無効なインデックスのREINDEXおよびDROPインデックスを修正( BDR-155、EBC-41) インデックスが無効な場合、REINDEXはエラーをスローします。ユーザーは無効にドロップできます DROPインデックスif_existsを使用したインデックス。

  • ローカルノードグループメンバシップのチェックを改善します(BDR-271) いくつかの関数、つまりbdr_wait_for_apply_queueと bdr_resynchronize_table_from_nodeはこのチェックを行わなかったため、 潜在的にクラッシュを引き起こす。

  • 誤解を招くCTASエラーを修正 基になるサポートされていないユーティリティまたは複製されていないユーティリティの場合、 エラーが発生し、基礎となるユーティリティについて言及する必要があります。

  • WALデコーダーの有効化に関する修正と改善(BDR-272、 BDR-427)

  • pglogical managerのWALデコーダーインフラストラクチャの削除を修正(BDR-484)

BDR 3.7.6

これは、 BDR 3.7のベータリリースです。 3.7.5で特定された問題の新しいメジャー機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、 BDR 3.6.25からのアップグレードがサポートされています。

改善

BDR WALデコードワーカーを分離するオプションを導入 (RM18868、 BDR-51、 BDR-58) これにより、数に関係なく、各ノードで単一のデコードプロセスを使用できます。 それに接続されたサブスクリプションの。 デコードされた情報は、ロジカル変更レコード(LCR)ファイルに保存されます。 従来のWALと同様の方法で他のノードにストリーミングされます。

  • CAMOとEagerの並列適用を有効にします(RM17858)

  • BDRWriterでリレーションキャッシングをリワーク これにより、キャッシュルックアップの間に発生した無効化の欠落が修正されます。 とテーブルの開口部。 また、ハッシュテーブルルックアップの量を減らしました(パフォーマンスの向上)。

  • 単一のDDLコマンドで一時オブジェクトと永続オブジェクトを混在させないでください (BDR-93) 一時オブジェクトで機能するDDLを複製しようとしないことが重要です。 そのため、 DDLはレプリケーションを確実に中断します。

  • bdr.alter_subscription_skip_changes_upto()を追加(BDR-76) 指定されたLSNまでのレプリケーションの変更をスキップできます サブスクリプション。同様のファンクションがpglogicalにすでに存在します。

  • snapshotエントリーハンドラのルックアップをより堅牢にします(BDR -86) これにより、コンセンサスsnapshotで将来のバグを導入makeことが難しくなります。 ハンドリング

  • bdr.consensus_snapshot_verify()を追加(BDR-124) 前に提供されたコンセンサスsnapshotが正しいことを確認するために使用できます それをbdr.consensus_snapshot_import()に渡します。

  • 特定のほとんどのDDLコマンドのサポートを追加 EDB Postgres Advanced Server (EBC-39、EBC-40)

  • 複製されることを想定していない複製されていないコマンドの警告spamを削減する 最初の場所で複製されます(VACUUMなど)

  • CAMO構成に関する警告とヒントを改善する

解決された問題

  • ライタでリレーションを開く前に、xidが割り当てられていることを確認してください これにより、並列適用のデッドロック検出が改善されます。

  • ファンクションdrop_triggerでテーブルoidをチェック( BDR -35) 無効なoidがファンクションに渡されたときにクラッシュする問題を修正しました。

  • 古いコンセンサススナップショットの適用を修正(BDR -231) 欠落しているグループUUIDを正しくハンドルせずに3.7ノードが発生していました 3.6クラスターに結合できません。

  • デフォルトの切り捨てハンドリングの再調整(BDR -25) デフォルトではロックしないでください。これは故障の可能性を引き起こす可能オーダーがありますが 切り捨て、後方互換性が向上します。

  • CREATE FOREIGN TABLEステートメントでOPTION句を使用するとクラッシュする問題を修正 (EBC-37)

  • 古いノードとの通信中に余分なデータを送信しないようにします コンセンサスプロトコル(BDR-135)

  • 混在バージョングループのコンセンサスsnapshotのkv_dataパートを読み取ります( BDR-130) 両方のBDR 3.6。 3.7コンセンサスsnapshotのこのパートを記述しますが、 BDR 3.7 snapshotも3.7で書き込まれた場合にのみそれを読み取ります。

  • bdrを移動します。 EEスクリプトへの制約(EBC-36) エンタープライズ版のみの機能なので、カタログのみをインストールする必要があります エンタープライズ版。

  • TABLESPACEおよびLargeでGRANT / REVOKEコマンドを複製しようとしないでください オブジェクト これらのオブジェクトは複製されないため、GRANTとREVOKEを複製しようとすると レプリケーションを中断します。

  • CAMOがリプレイの進行をブロックしないようにします(RT69493)

  • 失敗したCAMO接続ハンドリングを修正(RT69493、RM19924) 状態マシンを修正して、適切にクリーンアップし、これから回復する 失敗し、未使用およびアイドル状態にリセットされます。

  • 不明なノードからのRaftリクエストを受け入れない

    • コンセンサスリーダーは、知らないノードからのいかだ要求を受け入れてはいけません。

  • 未知のノードの進行状況についてコンセンサスプロトコルをネゴシエートしないでください(RT69779) ノードが強制的にドロップされても、まだ進行状況メッセージを受信する場合があります それ。これは、そのようなメッセージを優雅に無視する必要があります。 そのようなシチュエーションで。

その他の変更

  • サポートされていないコンセンサスプロトコルのコードを削除(BDR-86)

BDR 3.7.5

これは、 BDR 3.7のベータリリースです。 3.7.4で特定された問題の新しいメジャー機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、 BDR 3.6.22からのアップグレードがサポートされています。

改善

  • 「コンセンサスプロトコルをサポートする」ログspamを削減します。 (RT69557)

  • node_stateチェックでbdr.drop_nodeを拡張します。 (RM19280) 新しい引数「force」をbdr.drop_nodeに追加します。デフォルトはfalseです。 この場合、次の追加チェックが実行されます。 bdr.run_on_all_nodesを介して、ノードの現在のnode_state 落とすことが問い合わせられます。分離されるノードが完全ではない場合 すべてのノードで分離されたため、これでエラーが発生します。 force引数により、このチェックを無視できます。 この機能は、cascadeが以前に持っていた「強制」動作も削除します。 現在、健全性チェック(強制)をスキップオプションと、 1つは依存オブジェクトにカスケードします(カスケード)。

  • pg2q.enable_camoの廃止(RM19942、RT69521) パラメータは3.7で新しいbdr.enable_camoに変更されました。

  • 新しいパラメータdetector_argsをbdr.alter_table_conflict_detectionに追加 (RT69677) 個々の検出器に追加のパラメーターを許可します。 現在、row_versionにatttypeを追加するだけで、 列のデフォルトの整数だけでなく、smallintおよびbigint タイプ。

  • bdr.raft_leadership_transferの追加(RM20159) 特定のノードをRaftリーダーとして昇格させます。 Raftの論文によれば、リーダーシップを特定のノードに移すには 次の手順:

    • -現在のリーダーは新しい要求の受け入れを停止します-現在のリーダーはすべての保留中の追加エントリを指定されたリーダーに送信します-現在のリーダーは指定されたリーダーに選挙タイムアウトを強制し、次のリーダーになるためのより良い機会を与えます

    • この機能は、ほぼその概要に従っています。指定されたリーダーだけに追加エントリを送信する代わりに、ハートビートとしても機能するため、すべてのノードに送信します。それは現在のリーダーが指定されたノードにパワーを委任している間、他のノードがタイムアウトしないのを保証にするべきです。また、指定されたノードのステータスを確認し、ノードがアクティブなノードでない場合、または投票権がない場合はリクエストを受け入れません。

  • subscriber-onlyノードの概念を実装する これらは完全に結合されたノードですが、レプリケーションを送信しません クラスター内の他のBDRノードへの変更。しかし、彼らは変更を受け取ります クラスター内のすべてのノードから(もちろん、他のサブスクライバーのみを除く ノード)。彼らはRAFT投票プロトコルに参加していないため、 彼らの存在(または不在)はRAFTリーダーの選挙を決定しません。 これらのノードにはレプリケーションスロットを作成する必要はありません。 レプリケーションの変更を送信しないでください。同様に、何も作成する必要はありません 他のBDRノード上のこれらのノードのサブスクリプション。 これを実装するには、 BDRノードグループの新しいタイプを定義し、 「加入者専用」グループ。サブスクライバー専用ノードであると想定されるノード トップレベルのBDRグループではなく、このノードグループに結合必要があります。もちろん、 誰かが最初にサブスクライバのみのBDRノードグループを作成するニーズがあります。の 機能は自動的に作成しようとしません。

PostgreSQL 13のDDLレプリケーションサポートの改善 ALTER STATISTICSおよびALTER TYPE ... SETコマンドがサポートされるようになりました。

解決された問題

  • bdr.drop_nodeの安全性チェックを緩和します。 (RT69639) 同等なでノードが既にドロップされているノード、その同等なは 削除するノードのステータスを確認します。それはまだ大丈夫でなければなりません そのノードをドロップします。

  • 削除された自動パーティションルールを再挿入しないでください。 1つのノードで自動パーティションルールが削除され、アクションが 他のノードが1つを実行する場合、他のノードで複製される テーブルの保留中のタスクが多くなると、誤って ルールが削除されました。それは私たちが落ちない場所としての問題につながります 自動パーティションの依存関係チェックのため、リモートノードのテーブル ルールが失敗します。

  • node_summaryおよびlocal_node_summaryビューの定義を修正(RT69564) 基礎となるマルチプルカタログは、 ノード、 BDRは、 ノードと同じ名前付けの1つのみを使用します。 これらのビューはそれを反映せず、間違った情報を表示しました-もし ノードにマルチプルのインターフェースがあり、node_summaryビューにマルチプルが表示されます 結果およびlocal_node_summaryは必ずしも選択しません どちらかを修正してください。

  • bdr.node_log_configの修正(RM20318) ビューbdr.node_log_configを調整して、正しく結果 競合解決。

  • ライタ内のテーブルアクセス統計レポートを修正 これにより、アクセスとI / Oを示すPostgreSQLモニタリングビューが修正されます。 以前のベータ版で壊れていたテーブルの統計。

  • 3.6からのアップグレード後のbdr.conflict_historyのパーティショニングを修正 以前は3.6定義を保持していましたが、今は自動 新しい3.7インストールと同じ方法でパーティショニングします。

  • snapshotから初期化されるノードのノード名前の再利用を修正(RM20111) これらのノードは、以前にキャッチアップを引き起こす可能性のある初期状態情報を逃していました 結合プロセスのフェーズをスキップされたし、新しいノードが同時に欠落する 結果として書き込まれたデータ。これは正しく機能するようになりました。

  • Standard Editionでのテーブルの書き換え(VACUUM FULL)で発生する可能性のあるクラッシュを修正 (EBC-34) Standard Editionでトリガーを確認すると、テーブルの書き換え時にクラッシュする可能性があります 以前。

  • Standardでノードを削除するときにEnterprise Editionオブジェクトを削除しようとしないでください エディション(RM19581)

  • 文書言語の改善

BDR 3.7.4

これは、 BDR 3.7のベータリリースです。 3.7.3で特定された問題の新しいメジャー機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、 BDR 3.6.22からのアップグレードがサポートされています。

改善

PostgreSQL 13のサポートを追加

  • オプショナルのcommitted引数でbdr.get_node_sub_receive_lsnを拡張 デフォルトの動作が結果され、最後の 適用(フィルタリング)するコミット済みトランザクションのLSNを受信しました。 ファンクションのオリジナルの意図と使用です(例: HARPによる)。 falseを渡すと、このファンクションはフィルタリングされていないほとんどを結果ます。 以前のバージョンの動作とマッチング、最近受信したLSN。これ 変更はbdr.wait_for_apply_queueのハングに関連しています 以下を参照してください。

  • INCREMENT BYがgallocチャンクレンジを超えている場合のエラー(RM18519) smallint、int、bigintのgallocシーケンスは、1000、1000000、 各チャンクにそれぞれ1000000000個の値が割り当てられます。場合エラー INCREMENT値はこれらの範囲を超えています。

  • グローバルDMLロックなしでコンストレインを検証するためのサポートを追加(RM12646) DDLオペレーションALTER TABLE … ADD CONSTRAINTは、かなり時間がかかる場合があります バリデーションが実行されるための時間。 BDRで許可されるようになりました バリデーションの延期とALTER TABLE … VALIDATEの実行 長時間にわたってDMLロックを保持しない制約パート バリデーション期間。

    • 詳細については、文書の「 DDLレプリケーション」の章の「制約の追加」セクションを参照してください。

  • ALTER TABLE … VALIDATE CONSTRAINTSは完了を待機します ユーザが完了するのを明示的に待つことを期待する代わりに このDDLオペレーション、 BDRは進行状況を確認し、完了を待ちます 自動的に。

  • 新しい競合の種類apply_error_ddlとリゾルバskip_transactionを追加(RM19351) DDLレプリケーションによってERRORが発生するトランザクションをスキップために使用できます。 例、同じDDLがマルチプルのノードに手動で適用された場合。

  • bdr.stat_subscriptionに新しい統計を追加します(RM18548)

  • nabort-ライタが取得したアボートの数

  • ライタが見たエラーの数(現在は上記と同じ)

  • nskippedtx-ライタがスキップしたTXの数( skip_transaction競合リゾルバ)

  • nretries-ライタが再リスタート/再接続せずに再リトライした回数

  • 特にグローバルロックの場合、SystemTAP統合を改善します。

解決された問題

  • bdr.wait_for_apply_queueのハングを修正(RM11416、CAMOにも影響) キープアライブメッセージにより、LSNが前方に移動する可能性があります。そうでなければ 静止システム(処理されたトランザクションなし)、これには bdr.wait_for_apply_queueがハングする原因になりました。 対応するPGLライタに適用するものであれば何でも apply_lsnはreceive_lsnに到達しません。適切なCAMO クライアント実装はbdr.logical_transaction_statusを使用します。 次に、影響を受けるファンクションを内部的に使用します。したがって、CAMOスイッチ- またはフェイルオーバーもハングにつながる可能性があります。このリリースでは LSNインクリメントを破棄することによるハング 加入者に適用します。

  • 分離されたノードにもかかわらず、合意プロトコルバージョンのアップグレードを許可(RM19041) コンセンサスプロトコルバージョンから既に分離されたノードを除外する そのようなノードはコンセンサスに参加しないため、ネゴシエーション もうプロトコル。中で最新のプロトコルバージョンを保証します アクティブノードのセットが使用されます。

  • gallocシーケンスの多数の修正(RM18519、RM18512) gallocシーケンスの「nextval」コードには多くの問題がありました。

  • 大きなINCREMENT BY値(+ veまたは-ve)が正しく機能していませんでした

  • 大きなCACHE値が適切に処理されませんでした

  • 場合によってはMINVAL / MAXVALが尊重されない 問題の核心は、ラージ増分またはキャッシュ呼び出しが マルチプルのRAFTフェッチ呼び出しをmake必要があります。これにより、ループリトライコードが発生しました マルチプル回呼び出されます。ループを追跡するためのさまざまな変数 必要な調整。

  • CAMOおよびEagerトランザクションの最後にコミットされたLSNの追跡を修正(RM13509) GUC bdr.last_committed_lsnは標準用にのみ更新されました 非同期BDRトランザクション。CAMOまたはEagerトランザクション用ではありません。

  • bdr.ddl_epochカタログのNULL値の問題を修正(RM19046、RM19072) リリース3.7では、新しいepoch_consumed_lsn列が追加されました bdr.ddl_epochカタログ。新しい列を追加すると、列が設定されます テーブル内のすべての既存の行の値をNULLにします。しかし、コードは失敗しました NULL値を適切にハンドルします。これはゴミの読み取りにつながる可能性があります 値またはメモリアクセスエラーですらあります。ガベージ値は潜在的に バックエンドがはるかに遠いLSNで待機する可能性があるため、グローバルロックタイムアウトにつながる 未来へ。

    • これを修正するには、すべてのNULL値を「0/0」LSNに更新しますが、これはLSNの無効な値表現形式です。列は明示的にNOT NULLとマークされ、コードは列の新しいNULL値を生成しないように修正されています。

BDR 3.6.22からのアップグレード処理に関する修正 サブスクリプションライタと競合ハンドラーを適切に移行します PGLogical。この情報はBDR 3.6で使用されていました。確認する bdr.conflict_historyは、アップグレード後に適切に処理されます。

  • コンセンサスリクエストタイムアウト時のJOINING状態ハンドリングを修正(RT69076) JOINING状態ハンドリング中のtimeoudにより、ノードが BDRグループに結合します。リトライロジックは、この状態を正しく処理するようになりました。

  • replication_set_remove_tableへの入力を検証する(RT69248、RM19620)

  • ALTER COLUMN TYPEの欠落した列を適切に処理します(RM19389、RT69114)

    • これが発生したときにクラッシュするのではなく、標準エラーをスローします。

  • 競合検索中のタプルスロットのメモリハンドリングを修正しました(RM18543) 見つかったタプルが競合ログテーブルにログオンもクラッシュしなくなりました。

  • ローカルノードキャッシュの無効化ハンドリングを修正(RM13821) 以前は、 BDRは競合によりノードの作成またはノードのドロップに気付かない場合がありました 条件、およびユーザバックエンド内の誤った動作を選択します。

BDR 3.7.3

これは、 BDR 3.7のベータリリースです。 3.7.2で特定された問題の新しいメジャー機能と修正の両方が含まれています。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、3.6からのアップグレードはまだサポートされていません。

改善

  • 並列適用(RM6503) pglogical 3.7.3の新しいインフラストラクチャを使用して、並列のサポートを追加します 作家。 デフォルトは、同じpglogical設定オプション(および したがって、この機能は現在デフォルトでオフになっています) 並列ライターの数は、グループごとに変更できます bdr.alter_node_group_config()管理のnum_writersパラメータ インタフェース

  • resynchronize_table_from_node()は生成された列で動作します(RM14876) リモートノードから生成された列を除くすべての列をコピーします 生成された列の値をローカルで計算します。

  • resynchronize_table_from_node() freezesターゲットノード上のテーブル(RM15987) このファンクションを使用すると、最初にターゲットテーブルが切り捨てられ、次にコピーされます 宛先ノードに。このアクティビティはさらにタプルをフリーズします 再同期が発生したとき。これにより、大量のWALアクティビティが回避されます。 I / O + WALに関連するヒントビットが画像に含まれる場合に発生する可能性があります 将来、この宛先ノードで。

BDR拡張機能がインストールされているが、インストールされていないデータベースでのCRDTの使用を許可する ノード(RM17470)。 BDR拡張のあるノードでCRDT値を以前に復元しますが、何もありません ノードは、CRDTデータタイプが ノード識別子。現在、InvalidOid値を保存することにより修正されています。 ノード識別子は利用できません。その後、ノードがBDRに追加される場合 クラスタおよびCRDT値が更新されると、InvalidOidは UPDATEオペレーションのパートとして適切なノード識別子。

HARPプロジェクトで使用するための一貫したKVストアの実装を追加(RM17825) これはユーザが直接消費するためのものではありませんが、 HARPを機能させることができます 追加のコンセンサス設定なしでBDRを使用します。

解決された問題

  • 「local_only」レプリケーションオリジンを再度追加します(RT68021) bdr_init_physicalを使用すると、 リリース3.6.19まで存在していたバグ。このリリースでは、 欠落している場合は、再作成します。

  • bdr.alter_node_set_log_config()へのNULL引数を適切に処理します(RT68375、RM17994) このファンクションは、これに対する最初の引数が ファンクションはNULLです。適切なエラーメッセージを提供するように修正されました 代わりに。

  • gallocシーケンスを使用したMAXVALUEおよびMINVALUEの修正(RM14596)

    • 事前に値を取得している間に、制限に達した可能性があります。今私たち

    • 制限に達する前に取得した値のみを使用します。

  • オプションで、以前のエポックによってトリガーされたレプリケーションの変更を待機します(RM17594、RM17802) これにより、 BDR全体でのマルチプルの同時DDL操作のハンドリングが改善されます。 以前はグローバルロックタイムアウトになるグループでしたが、現在は ノード間のレプリケーションラグがラージすぎない限り通過することが許可されました。

メンバーシップは、 ターゲットノードによってサブスクライブされたレプリケーションセット内の再同期されたテーブル(RM17621) これは、権限のないユーザーがテーブルをコピーできないようにオーダーに重要です それ以外の場合はアクセスする能力がありません。

  • 以前の試行が失敗した後、新しいグループ作成要求が機能するようにします(RM17482) 以前は、 BDRが有効になるまで、一部の設定で新しいリクエストは常に失敗していました。 最初のグループ作成時にノードから完全に削除され、再インストールされた 失敗しました。

  • 自動パーティション機能が有効な場合、コンセンサスワーカーのCPU消費を削減 使用済み(RM18002)

  • 初期データ同期中のメモリーリークを修正しました(RM17668)

  • update_recently_deletedの競合検出を修正(RM16471)

    • この競合は3.7.2では正しく検出されませんでした。

  • gallocシーケンスを変更するときにオプションを確認します(RM18301、RT68470) Gallocシーケンスは一部の変更を受け入れないため、ユーザに警告します 許可されていないオプションが使用されます。

  • bdr_wait_slot_confirm_lsnがすべてのスロットを待機していることを確認します(RM17478) このファンクションは、ダウンストリームをチェックするときにスロットの一部をスキップするために使用されました すべてを複製しました。

  • PART_CATCHUPノードの状態ハンドリングの改善(RM17418) ノードの状態が原因でPART_CATCHUPが永久に残る場合を解決 ノード間の競合条件。

  • 分割されたノードが欠落している場合のコンセンサスプロセスの弾力性を高める ノードの状態をPARTEDに更新しようとしても失敗しないでください。 長く存在します。

  • bdr_init_physicalから--recovery-conf引数を削除(RM17196) 以前は動作しませんでしたが、PostgreSQL12にはもうありません recovery.conf。

その他の改善

  • デフォルトでbdr.truncate_lockingを有効にする これは、常に一貫した結果を生成するためにTRUNCATE操作に必要です BDRグループで同時DMLが発生している場合。 これは以前のベータでは見逃されていました。

  • 他のノードで仮想シーケンスレコードを作成するRM16008 gallocシーケンスを作成し、同じ値でその値を使用しようとすると トランザクションブロック、それはまだ他のノードに存在しないため、 他方で「次のシーケンスチャンクをフェッチできませんでした」というエラーで使用される ノード。これを解決するには、他のノードに仮想レコードを作成します。

  • 文書の言語が大幅に改善されました。

BDR 3.7.2

これは、 BDR 3.7のベータリリースです。

重要な注意

BDR 3.7では、いくつかのメジャー新機能と、既存のアプリケーションとの下位互換性に影響を与えるアーキテクチャ上の変更が導入されています。詳細については、Upgradesを参照してください。

ベータ版ソフトウェアは稼動環境ではサポートされていません-アプリケーションテストのみ

このリリースでは、3.6からのアップグレードはまだサポートされていません。

BDR 3.7のハイライト

  • 並列適用 レプリケーションを適用する並列ライターの数を構成できます ストリーム

  • 自動パーティション

    • 詳細については、AutoPartitionを参照してください。

  • CREATE TABLE ... ASステートメントのサポート(RM9696)

    • この機能は、Enterprise Editionでのみサポートされるようになりました。

  • 物理的表現を改善するオーダーにBDRサブグループを定義する新しい機能 BDRクラスターの構成。 これにより、 BDRクラスターが分散している構成も簡素化されます。 マルチプルのデータセンターとデータベースのパートのみが複製されます 各サブグループとしてのデータセンターには、自動的に新しいデフォルトのレプリケーションがあります それに割り当てられたセット。

  • 競合はデフォルトでbdr.conflict_historyに記録されます 行単位セキュリティを使用してパーティションテーブルにログを記録し、簡単に アプリケーションユーザーの競合へのアクセス。

  • 新しい競合タイプmultiple_unique_conflicts マルチプルのUNIQUEを含む複雑な競合の解決を許可します INSERTとUPDATEの両方のコンストレイン。

  • ビューbdr.node_replication_ratesとbdr.node_estimateをマージして

    • bdr.node_replication_rates。 bdr.node_estimateは削除されました(RM13523)

  • REINDEXコマンドを複製しないでください。メンテナンスコマンドとして扱われます。

  • デフォルト設定に対するその他のさまざまな変更

その他の改善

  • ノード接続と地理的な説明のためのオプションのモニタリングテーブル ディストリビューション

  • bdr.resynchronize_table_from_nodeファンクションを追加(RM13565、RM14875) このファンクションは、リモートノードからのリレーションを再同期します。これ リレーションのグローバルDMLロックを取得し、リレーションを切り捨てます ローカルで、リモートノートからデータをコピーします。リレーションは 同じ名前と定義を持つ両方のノードに存在します。

  • で使用されるファンクションbdr.trigger_get_origin_node_idを追加します 競合トリガー(RM15105、RT67601) これにより、ユーザーは次のように競合トリガーを定義できます。 DMLの競合が発生した場合、信頼できるノードが常に勝ちます。

  • bdr.wait_for_apply_queueを拡張して特定のLSNを待つ(RM11059、RT65827)

  • bdr.last_committed_lsnによるコミット済みLSNレポートの追加(RM11059、RT65827)

BDRは接続文字列のURIも受け入れるようになりました(RM14588) また、フォーマットURI “postgresql:// …”も指定できます。 接続文字列。

解決された問題

  • idle_in_transaction_session_timeoutに対する回復力(RM13649、RT67029、RT67688) idle_in_transaction_session_timeoutを0に設定して、ユーザ設定を回避します 接続を閉じ、snapshotを無効にする可能性があります。

BDR WALメッセージの正しいパース(RT67662) まれに、 BDRクラスター全体に複製され、必要なDDL グローバルロックは、「無効なメモリ割り当て要求サイズ」などのエラーを引き起こす可能性があります または「直接の不適切なパースによる「メッセージにデータが不十分です」 WALメッセージ。このようなWALを解析してハンドルようにコードが修正されました メッセージを正しく。

  • マルチプルのサブコマンドを使用したALTER TABLEのロックを修正(RM14771) 複数のALTER TABLEサブコマンドはロックを尊重する必要があります セット全体の要件。 1つのサブコマンドがロックをニーズとする場合、 その後、ALTER TABLEコマンド全体で同様にニーズになります。

BDR 3.6.19

これはBDR 3.6のセキュリティおよびメンテナンスリリースであり、さまざまなマイナー機能も含まれています。

解決された問題

  • セキュリティ:内部BDR SQLステートメントのsearch_pathを空に設定します(RM15373) また、内部で使用されるすべての演算子を完全に修飾します。 BDRは現在保護されています CVE-2018-1058で特定された攻撃リスクから、ユーザアプリケーション そこで特定された安全でないコーディング慣行を回避します。 詳細については、 BDRセキュリティの章を参照してください。

  • セキュリティ: BDR管理機能に必要な特権を上げる(RM15542) スーパーユーザまたはbdr_superuser以外のロールによって実行される場合:

    • -bdr.alter_table_conflict_detectionにはテーブル所有者がニーズです-bdr.column_timestamps_enableにはテーブル所有者がニーズです-bdr.column_timestamps_disableにはテーブル所有者がニーズです-bdr.drop_triggerにはテーブル所有者がニーズです-bdr.alter_sequence_set_kindにはシーケンス所有者がニーズです-bdr.create_conflict_triggerにはテーブルのTRIGGERパーミッションとファンクションのEXECUTEパーミッションがニーズです-bdr.create_transform_triggerにはテーブルのTRIGGERパーミッションとファンクションのEXECUTEパーミッションがニーズです

    • 新しいGUC bdr.backwards_compatibilityでは、以前の動作を必要とする既存のクライアントについて、この新しく導入されたチェックをスキップできます。

  • マルチプルのグローバルロックを解放した後にハングする可能性を解決しました(RT67570、RM14994) タイムアウト後にグローバルロックを解除するためのコードパスのバグ -1の値でバックエンドのPIDをオーバーライドすることになり、また bdr.global_locksのwaitersリストに表示されます。これで 順番にウェイターリストを不自由にし、最終的に無限につながった ループこのリリースでは、オリジナルの原因であるオーバーライドが修正されています このハングのとエントリをロック待機リストから正しく削除します。

BDR WALメッセージの正しいパース(RT67662) まれに、 BDRクラスター全体に複製され、必要なDDL グローバルロックは、「無効なメモリ割り当て要求サイズ」などのエラーを引き起こす可能性があります または「直接の不適切なパースによる「メッセージにデータが不十分です」 WALメッセージ。このようなWALを解析してハンドルようにコードが修正されました メッセージを正しく。

  • マルチプルのサブコマンドを使用したALTER TABLEのロックを修正(RM14771) 複数のALTER TABLEサブコマンドはロックを尊重する必要があります セット全体の要件。 1つのサブコマンドがロックをニーズとする場合、 その後、ALTER TABLEコマンド全体で同様にニーズになります。

  • ALTER TABLE … ADD COLUMN回避策の例のバグを修正(RT67668) 同時実行を回避するためにbdr.global_lock_table()が必要な理由を説明する その場合、問題を引き起こす変更。

  • 物理的スタンバイの昇格後のハングを修正(RM15728) BDRノードに昇格された物理的スタンバイがスタートに失敗した可能性があります 内部カタログからの古いデータの使用による複製 キャッシュ。

  • bdr.trigger_get_type()が自分自身で呼び出されたときのクラッシュを修正(RM15592) ストリーミングトリガーファンクションの外側でbdr.trigger_get_type()を呼び出すと、 クラッシュを引き起こす。外部で呼び出されたときにNULLを結果ようにファンクションを修正しました ストリーミングトリガーファンクション。

改善

  • bdr.trigger_get_origin_node_id()は優先ノードの解決を許可します(RM15105、RT67601) 一部のお客様には、ノードに基づいて競合を解決する必要があります それが変更のソースです。これは信頼できるソースとも呼ばれます。 信頼済みサイトまたはAlwaysWins解決。以前のバージョンのBDRが許可されました 2つのノードを持つこれらのメカニズム。この新しいファンクションでは、このオプションを使用できます 任意の数のノード。例が文書化されています。

BDRは接続文字列でURIを受け入れるようになりました(RM14588) すべての接続文字列で、URI「postgresql:// …」のフォーマットを使用できるようになりました

  • 新しいファンクションbdr.resynchronize_table_from_node()(RM13565、RT67666、RT66968) 単一のテーブルを切り捨ててから、選択したノードから再同期できます。 グローバルdmlロックを保持しながら。これにより、テーブルを再同期できます 次のことを必要とせずに、データの相違またはデータの破損を追跡する ノード全体を再生成します。外部キーは削除され、その後再び有効になります。

  • 明示的に複製されないトランザクションによって行われた変更のフィルタリングを改善します(RM15557) 以前はbdr.xact_replication = offを使用してトランザクションによって行われた変更 またはbdr.difference_fixによってトランザクションがリモートに送信されます ノード、偽の競合を生成し、労力を浪費します。変更点 代わりにソースノードでフィルタリングされ、パフォーマンスが向上します。

  • 初期および定期的なトランザクションステータスチェックで非同期libpqを使用(RM13504)(EE) CAMOを有効にすると、処理中のトランザクションのステータスが確認されます パートナーノードに対して。これは標準のPostgres接続を使用します PGLマネージャプロセスをブロックするために使用されるlibpqを介して。これ リリースは、非同期libpqを使用してPGLを許可するようにロジックを変更します 他のタスクを実行するマネージャ(例:Raftメッセージの処理) そのステータスチェックが実行されます。これにより、タイムアウトまたは より応答性の高いPGLマネージャプロセスによるデッドロック。

  • 追加のメッセージフィールドは、 DDLレプリケーションの問題の診断に役立ちます(RM15292)

BDRユーザーに必要な特権に関する文書を明確化(RT67259、RM15533)

BDR 3.6.18

これはBDR 3.6のメンテナンスリリースであり、マイナー機能と以前に特定された問題の修正が含まれています。

改善

  • synchronize_structureオプションをjoin_node_groupに追加(RM14200、RT67243) 新しいsynchronize_structureオプションは、 ‘all’または ’none’。スキーマ全体を同期するか、 DDLをコピーしません。 これにより、アプリケーションスキーマのローリングアップグレードを実行できます。 ユーザー管理スキーマ(DDL)変更ステップを使用します。

  • bdr * difference_fix 関数で事前に作成されたローカルオリジンを使用するようにしました(RM14189) にローカルオリジンを作成するために使用される関数のbdr * difference_fixファミリー 競合の修正を実行します。 「bdr_local_only_origin」ローカルを事前作成します 拡張機能作成時のオリジン。これと同じローカルオリジンが上記で使用されています 今すぐ機能します。

  • bdr.monitor_group_versions()で監視値を調整します(RM14494) pglogicalバージョンとbdrバージョンが異なる場合、CRITICALはレポートされなくなりました。 実際には重要ではありません。 BDRのエディションが異なる場合、警告をレポートするようになりました ノード間。

  • 文書の大幅な書式修正とスペルチェック

解決された問題

  • ノードの結合を修正して、bdr_superuser権限のみを使用するようにしました(RM14121、RT67259) これは、のjoin_target_dsn接続に影響します join_node_groupファンクション、でのみ動作するように修正されました 接続に使用されるロールのbdr_superuser権限。

  • bdr.show_subscription_statusでEXECをbdr_real_all_statsに付与(RT67360、RM14624) これにより、bdr_read_all_statsロールとbdr_monitorロールの両方が bdr.subscription_summaryビュー

BDRタイプを使用してコピーデータbdr_init_physicalの失敗を修正(RM14522) bdr_init_physicalはDROPではなくbdr.drop_node()を使用するようになりました EXTENSION。CRDTなどのBDRデータ型を使用するすべての列が発生します。 静かにテーブルから削除されます。

  • ビューがCRDTを参照するために発生する3.6.17アップグレードスクリプトの失敗を修正しました(RT67505) アップグレードスクリプトは、テーブルとマットビューでのみ実行されるようになりました。アップグレードの失敗は 「エラー: BDRグローバルロックマネージャがまだ初期化されていません」などの偽のエラーを与える

  • 非結合サブスクリプションを、スタートアップにINIT状態ではなくCATCHUP状態に設定します ノードの結合中にメタデータを2回コピーする、まれではあるが可能性のあるケースを回避します。

BDRカタログが存在しない場合のgallocシーケンスの検索を修正。 (RT67455、RM14564) これにより、シーケンスのクエリーがエラーをスローする可能性があります bdrライブラリを追加すると、「リレーションのキャッシュ検索に失敗しました…」など shared_preload_librariesがBDR拡張機能は作成されません。

BDRがロードされているが初期化されていないALTER TABLE ALTER COLUMNを許可する(RM14435) BDR拡張機能はロードされていますが、ローカルBDRノードは作成されていないため、 DDLレプリケーションロジックは、ALTER TABLEの実行を引き続き許可するようになりました ALTER COLUMNオペレーション。

BDRノードが作成されていない場合、LOCK TABLEワーニングが表示されない(RM14613) LOCK TABLEステートメントの評価がbdr.assess_lock_statementのときに表示されない BDRノードが作成されるまで、「無視」以外の値に設定されます。

  • consensus_disableのNULLデリファレンスを防止します(RM14618) bdr.consensus_disableは、コンセンサスプロセスが 実行中。そうでない場合にセグメンテーション違反を防ぐために修正します ファンクションが呼び出されます。

BDR 3.6.17

これはBDR 3.6のメンテナンスリリースであり、マイナー機能と以前に特定された問題の修正が含まれています。

改善

DDLを複製しない場合、ALTER TABLE ALTER COLUMN TYPE with rewriteを許可します (EE)(RM13244) 場合によっては、制御されたDBA環境では、変更することが可能です ローリングを採用することにより、暗黙的にキャスト可能なものにカラムのタイプ 非複製環境でのこの列のタイプのアップグレード すべてのノードを1つずつ。このテーブルで他の同時アクティビティを許可します 書き換え中のノード。また、このようなALTERコマンドは実行できないことにノートしてください トランザクションブロック内。

  • 競合ロギング設定ビューを追加(RM13691、RT66898) 競合に関する情報を表示するbdr.node_log_configビューを追加します ロギング構成。

  • 新しいグループモニタリングビューと機能を追加(RM14014) これらのビューと機能は、 BDRインストールの状態をレポートします。 BDRグループ内のすべてのノードにわたるレプリケーションスロットとコンセンサス。

  • 構成パラメーターに関連するDDLレプリケーションの現在の状態をログに追加します コンテキスト(RM13637) トラブルシューティングを改善します。

解決された問題

  • 参加ノードの既存のスロットをドロップしないでください(RM13310、RT67289、RT66797) これにより、ノードを使用してノードを結合したときに矛盾が発生する可能性がありました bdr_init_physicalは、新しいノードのスロットを事前作成したため 結合中に再利用されることになっており、代わりに削除されて再作成されました。 これで、スロットが正しく保持され、矛盾がなくなります。

  • パートナーノード(EE)が欠落しているにもかかわらずCAMOノードのリスタートを修正(RM13899、RT67161) CAMOとして設定されたBDRノードの検索エラーを防止します オリジンノードがドロップされた場合、存在しませんが、 CAMO用にまだ構成されています。

  • bdr.column_timestamps_enable()(EE)のロックを修正(RT67150) 同じトランザクションおよびセッションレベルのロックを保持しないでください。そうでない場合、PREPARE、 CAMOおよびEagerレプリケーションは、これが使用されているトランザクションでは機能しません。

BDR競合解決をPGLのみのサブスクリプションに適用しようとしないでください(RT67178) BDRはpglogicalサブスクリプションではなく、 BDRサブスクリプションでのみアクティブにする必要があります。

  • CAMOパートナーに、学んだら最終決定を結果せる(RM13520) オリジンノードがローカルモードに切り替わった場合、CAMOを一時的にドロップします 保護、CAMOパートナーが暫定的にすることは可能です トランザクションを内部でアボートしますが、実際には最終的にコミットします (オリジンノードと同期するため)。以前のリリースでは、これは 記録されていクエリーファンクション トランザクションの「中止」結果を結果ます。このリリースでは 暫定アボートをオーバーライドする最終コミット決定 内部的に(カタログテーブルbdr.node_pre_commit)。

  • CLCD / CRDTデータ型を適切にTOAST可能にする(EE)(RM13689) CLCD / CRDTデータ型は、PLAINストレージを使用するものとして定義されました。これはなることができます 列が多すぎるテーブルの問題として、またはラージのノードがある場合 関与しています。これは、これらのデータ型を使用するように変換することで解決されました 拡張ストレージにより、ラージサイズの値が可能になります。

  • ノードの昇格中に重複メッセージが受信されないようにします(RM13972) キャッチアップ段階で、結合ソースから結合ノードに透かしを送信します 他のすべてのレプリケーションの現在の位置について保証に学習するための結合 キャッチアップ中に転送するデータがない場合でも、ノード。 それ以外の場合は、プロモーション中に古いlsnsを要求して受け取ることがあります メッセージを複製し、結合に失敗します。

  • 非トランザクションDDL操作(EE)のCAMOを自動的に無効にする トランザクションブロック内ではいくつかのDDL操作は許可されていません そして、そのようにCAMOの保護から合理的に恩恵を受けることはできません 提供しています。回避するために、これらのCAMOを自動的に無効にします COMMIT時の「準備できません」エラー。

  • bdr.move_group_slot_all_nodesがBDRノードなしで呼び出されたときのエラーを修正 データベースに存在する(RT67245) 作成する前に、将来のBDRマスタの物理的スタンバイを設定できます。 BDRノード。

  • CLCDがオンの場合、テーブルにPRIMARY KEYがあることを確認します(EE) これは、ユーザがテーブルでCLCDを有効にできないようにする健全性チェックです。 PRIMARY KEYを使用すると、このようなテーブルの競合検出が中断されます。

BDR 3.6.16

BDR 3.6.16は、 BDR 3.6シリーズの16番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • bdr.alter_table_conflict_detection()の追加(RM13631) このファンクションは、競合検出メソッドを変更するためのUIを統合します。 個々のテーブル。オリジンベース、row_versionベースの選択が可能 同じインタフェースを使用した列レベルベース(EEのみ)の競合検出。 古い機能は引き続きサポートされますが、考慮される必要があります 廃止され、 BDR 3.7で削除されます。

  • bdr.default_conflict_detection構成オプションの追加(RM13631) 上記のbdr.alter_table_conflict_detection()ファンクションに関連して、 新しい構成オプションにより、デフォルトの競合検出を設定できます 新しく作成されたテーブルのメソッド。

  • 強制パートノードの動作を変更する(RM13447) 強制ノードパートは、最初に別れのコンセンサスを得ようとします。 コンセンサスが失敗した場合、またはノードに対して呼び出された場合、ローカル変更を行います コンセンサスベースのパートプロセスをすでに開始しているが、プロセスが停止している 手順の1つ。

  • bdrをドロップすると、bdr-enterprise拡張機能が自動的にドロップされます 拡張(RM13703) これにより、bdr拡張機能をドロップせずに使用する際の使いやすさが向上します。 カスケード。ユーザがpglogicalを保持したい場合例に便利です。 BDRに関連付けられたノード。

  • 既存のアクティブと同じ名前のノードに参加する際のエラー報告を改善 ノード(RM13447、RT66940) 前のエラーメッセージは、 BDRのように見えるため、混乱を招きました ノード名前の再利用を許可しません(これは行います)。

  • bdr_init_physicalにapplication_nameを設定します このツールで問題を診断するときに役立ちます。

  • ALTER TABLEの制限文書の改善(RM13512、RM13244、RT66940) varchar列の長さを変更するための新しい回避策を含む。

解決された問題

BDR gallocシーケンスのpg_dumpを修正(RM13462、RT67051) Gallocシーケンスは、シーケンスヒープに追加データを内部的に格納します。 BDRが非表示になりました SELECTからの追加データ。これにより、シーケンスに対するクエリ( 通常のユーザクエリーまたはpg_dumpからのクエリー例)は、通常の シーケンス情報。

  • CLCDのREPLICA IDENTITY FULLの強制を修正

    • 高度な競合処理アプローチ(CLCD、CRDT)では、

    • レプリカIDが完全です。しかし、機能が最初にどのように

    • 独立して進化したが、これは適切に実施(および文書化)されなかった

    • そして一貫して。現在、REPLICA IDENTITY FULLを正しく実施しています。

    • すべてのテーブルのCLCD。

  • 他のノードの結合ソースとして使用されたノードのノード名前の再利用を修正 BDRグループの既存のノード(RM12178、RM13447) ソースノードには特別なハンドリングがあるため、新しく追加make必要があります。 参加ノードは、分離された同じ名前のノードと混同されません。

  • 新しく参加するノードの既存のノードにローカル状態を適用する(RT66940) そうしないと、結合プロセス中の意思決定で誤った状態が使用される可能性があります 情報を取得し、スロットの作成やサブスクリプションの作成などのタスクを逃します。

  • ノードレベルのログフィルターと競合リゾルバの構成を正しくクリーンアップする (RM13704) これにより、関連するドロップを行わずにBDRノードをドロップしようとするときの問題が解決します pglogicalノードと後でBDRノードを再作成します。

  • 分離されたBDRノードのRaftでセグメンテーション違反を防ぐ(RM13705)

BDR 3.6.15

BDR 3.6.15は、 BDR 3.6シリーズの15番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • 解決されたすべてのCAMO決定の永続的なログを保持する(RM12712) CAMOパートナーが行ったすべての決定を記録する bdr.logical_transaction_status、つまりフェイルオーバーの場合。

  • 行バージョン追跡を有効/無効にする機能を追加(RM12930) 列を手動で追加するよりも使いやすく、エラーが発生しにくいインタフェース そしてトリガー。

  • timeshardおよびgallocのcurrval()およびlastval()サポートを追加

    • シーケンス(RM12059)

  • レート制限の背景にpglogical.min_worker_backoff_delay設定を追加 ワーカーの再起動、およびpglogical.worker_tasks診断ビュー バックグラウンドワーカのアクティビティ。 pglogical 3.6.15リリースノートと 詳細については文書。

解決された問題

  • walsender内でTOAST列値をコピーする際のバッファオーバーランを防止 出力プラグイン(RT66839) これにより、特定のタイプのwalsenderがクラッシュする問題が修正されます TOASTされた列に触れるワークロード。

  • bdr-enterprise拡張機能時の「type bdr.column_timestamps not found」エラーを修正 bdrエンタープライズライブラリがshared_preload_librariesにある場合はインストールされません (RT66758、RM13110)

BDR 3.6.14

BDR 3.6.14は、 BDR 3.6シリーズの重要なメンテナンスリリースです。このリリースには、CAMOおよびその他の機能のメジャー修正と、マイナーな新機能が含まれています。

改善

  • bdr.camo_local_mode_delayを追加して、CAMOローカルモードでの調整を許可します(RM12402) CAMOローカルモードでトランザクションスループットをシンプルに調整します。 オリジンノードがより多くのトランザクションを処理するのを防ぐため ペアはCAMOを有効にしてハンドルできます。

  • bdr.camo_enable_client_warningsを追加して、CAMOモードで警告を制御します(RM12558) CAMOの対象となるデータベースでアクティビティが実行されると、警告が発行されます プロパティは保証できません。知識のあるユーザーは、これを無効にすることを選択できます そのような警告がログをいっぱいにしないようにしたい場合。

  • 認識されない構成設定に関する警告

  • スタートアップメッセージの「 BDRのローディング」メッセージを前に移動する

  • 行バージョンの競合検出のドキュメントを大幅に強化(RT66493)

  • NOTIFYがCAMO / Eagerでは不可能であることをドキュメントに明確化

  • global_lock_request_time、local_lock_request_timeを追加 およびlast_state_change_time列からbdr.global_locksビュー ロックのモニタリングと診断の使用。

  • コンセンサスsnapshotのエクスポート/インポート用のSQL関数を追加(RM11433) これらの機能により、 BDRシステムカタログのマニュアル同期が可能になります。 破損またはユーザの間違いの場合。

解決された問題

  • remote_commit_tsの設定が正しくないため、パートナーノードでUPDATEがスキップされたされました(RM12476) 一部のCAMOメッセージでコミットタイムスタンプが設定されていなかったため、last-update-winsが失われていました。 彼らが勝ったはずの比較。つまり、一部のUPDATEがスキップされたされたとき、 更新は別のマスタから同時に発生しました。これは通常は発生しません ただし、AlwaysOnクラスターでは、パッシブマスタノード経由で書き込みが発生した場合に発生する可能性があります。

  • 制御バックエンドがなくなった準備済みトランザクションのみを解決する(RM12388) これにより、pglogical マネージャプロセスとユーザバックエンド間の競合条件が修正されます。 CAMOトランザクションの実行。マネージャプロセスによる早すぎる解決 プリペアードトランザクションたトランザクションは、トランザクションが中断されたとしてマークされる可能性があります パートナーノード。一方、オリジンはトランザクションをコミットすることになります。これにより データの相違。この修正により、マネージャプロセスは解決しようとするだけになります。 制御ユーザバックエンドが終了したか、またはそうでない準備されたトランザクション CAMOトランザクションをより積極的に管理します。改訂されたコードは、 ProcArrayLock。競合を減らし、パフォーマンスとスループットを改善します。

  • CAMOパートナーのコミット決定の時期尚早なクリーンアップを防止します。 (RM12540) CAMOまたはEager All Nodeでコミットまたはアボートの決定を維持するようにします 次の場合、bdr.node_pre_commitのトランザクションは15分以上 決定を学習していないノードが少なくとも1つあり、 まだクエリーします。これにより、矛盾の可能性が排除されます CAMOオリジンとパートナーノードの間。

  • デッドロックされたCAMOまたはEagerトランザクションを解決します(RM12903、RM12910) lock_timeoutとアボートフィードバックをオリジンノードに追加します プライマリキーの競合による分散デッドロックを解決する 更新。これにより、頻繁に再起動したり、 Eager All Nodeおよび同期CAMOトランザクション用のPGLライタプロセス。

  • マルチプルのノードからのトーストデータの同時更新による潜在的な相違の修正(RM11058) これは、UPDATEが1つ以上のトーストされた列を変更するときに発生しますが、 同時ですが、後で別のノードでUPDATEコミットします。これは、 PostgreSQLは、UPDATEによって変更されなかった場合、 TOASTデータをWALログに記録しません コマンド。その結果、論理的にデコードされた行にはこれらの列があります 変更されていないTOASTとしてマークされ、実際の値が含まれていません。修正が処理されます BDR -EEでは自動的に、 BDR -SEでは追加のトリガーを作成する必要があります 更新をパブリッシュし、トースト可能なデータを持つテーブルで(これも行われます 自動的に)。追加のチェックのパフォーマンスは小さくても測定可能です オーバーヘッド。記録されたデータは、影響を受けるケースでのみ増加します。お勧め ストレージを最適化するためのtoast_tuple_targetのチューニング。 REPLICA IDENTITY FULLを含むテーブルは、この問題または修正の影響を受けません。

  • 迷惑メールを回避するためにリークパートナーに問い合わせた後、接続を適切に閉じます。 (RM12572)

  • bdr.wait_for_apply_queueを修正して、指定されたLSNを尊重します(RM12552) 以前のリリースでは、target_lsn引数がオーバーライドされ、 ファンクションは、target_lsnが指定されていない場合と同じように動作しました。

  • 不明なノードからの進捗メッセージを無視する(RT66461) ノードの分離中の問題を回避します。

  • ALTER TABLEとパラレルクエリでbdr.xact_replicationを動作させる(RM12489)

BDR 3.6.12

BDR 3.6.12は、 BDR 3.6シリーズの12番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • DELETE操作にcheck_full_rowを適用する(RT66493) これにより、delete_recently_updated競合の検出が可能になります。 DELETEオペレーションは、満杯のテーブルで実時間後に行われました。 行チェックが有効になりました。

  • グローバルDMLロックトレースの改善 グローバルDMLロックトレースに情報を追加して、グローバルデバッグをヘルプします。 問題をより効果的にロックします。

  • 結合時にレプリケーションセットを検証します。 (RM12020、RT66310) 参加ノードが次の場合、bdr.join_node_group()からエラーを発生させます を使用してデフォルト以外のレプリケーションセットをサブスクライブするように構成 参加前の結合が、サブスクライブ先の一部 レプリケーションセットがありません。

    • 以前のリリースでは、結合プロセスの後半で参加ノードが失敗し、強制的に分割する必要がありました。または、成功したように見えても、空のテーブルと結合する場合があります。

解決された問題

  • bdr.run_on_all_nodesのクラッシュを修正(RM12114、RT66515) 初期化が正しくないため、bdr.run_on_all_nodesは 以前は、PARTEDノードの存在下でセグメンテーション違反でクラッシュしていました。

  • エポック消費WALメッセージをブロードキャストしないでください(RM12042) メッセージをすべてのノードにブロードキャストすると、一部のノードが Global DDL Lock Epochは、まだ安全ではない状況で前進しています。 実行時の同時DMLステートメントに対する保護が低下する グローバルDMLロックを必要とするステートメント。

  • 単一のマルチプルのBDRノードがあるインストールのグローバルロックを修正 PostgreSQLインスタンス グローバルロックは、ロックメッセージ 単一のノードに複数のBDRノードがある場合、誤ったノードIDが含まれていた PostgreSQLインスタンス。

  • ドキュメントのいくつかの例SQLのタイプミスを修正

BDR 3.6.11

BDR 3.6.11は、 BDR 3.6シリーズの11番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

PostgreSQL 11.6のサポートAPI

  • ノード名前に「-」(ハイフン)文字の使用を許可する(RM11567、RT65945) ノード名前にハイフンが含まれるpglogical3ノードが作成された場合 BDRはそのデータベースにノードを作成できませんでした。

  • 更新ノードがわかっている場合、update_origin_changeの競合を生成しない 最新のローカル変更を確認しました(RM11556、RT66145) 競合解決のオーバーヘッドとupdate_origin_changeのロギングを削減します 競合が偽陽性であることを示すことができる場合。これは完全ではありません update_origin_changeから誤検出を削除しますが、 古い行にUPDATESがある場合に発生します。 これにより、古い行のオリジンが変更された場合の競合ログspamが減少します。また、 競合トリガーの呼び出し回数は大幅に少なくなります。

  • bdr.wait_for_apply_queueを拡張して特定のLSNを待つ(RM11059、RT65827)

  • 新しいパラメータbdr.last_committed_lsnを追加(RM11059、RT65827) 各COMMITの後に値がクライアントに報告され、アプリケーションが許可されます マルチプルのノードで因果的読み取りを実行します。

  • 適用および受信したLSNのステータスクエリー機能を追加(RM11059、RM11664) 新しい関数bdr.get_node_sub_receive_lsnおよび bdr.get_node_sub_apply_lsnは内部の取得を簡素化します HAproxyヘルスチェックスクリプトに必要な情報。

  • CRDTタイプの総和()およびavg()集約を追加(RM11592、RT66168)

  • 物理的スタンバイのレプリケーションスロットの初期同期を高速化 (RM6747)

  • bdr.pg_xact_originファンクションを追加して、xidのオリジンをリクエストします(RM11971)

  • TRUNCATEを設定するbdr.truncate_locking構成オプションを追加 コマンドのロック動作(RT66326) この設定オプションは、trueがTRUNCATEに従うかどうかを決定します bdr.ddl_locking設定は、新しい安全な動作です。 (デフォルトのfalseの場合)ロックは行われません。 潜在的に安全でない動作。

  • 競合トリガーによるupdate_recently_deletedのコミットタイムスタンプの表示を許可 ターゲット行(RM11808、RT66182)

解決された問題

  • column_timestampsデータタイプのハッシュ/ equality opclassを追加(RT66207) REPLICA IDENTITY FULLでは、タプルのすべての列の比較が必要です。 したがって、column_timestampsデータタイプは等値比較をサポートする必要があります。

BDR-EEの競合ドキュメントを修正(RT66239、RM9670) BDR3.5で行われた変更は、競合ドキュメントに正しく反映されませんでした

  • 初期同期中にgallocシーケンスのプロトコルバージョンをチェックしない (RM11576、RT65660) gallocシーケンスが既に存在する場合、bdr_init_physicalは必要ありません プロトコルのバージョンをrecheckてください。

  • 遅延ノードでのgallocシーケンスチャンクトラッキングの破損を修正 (RM11933、RT66294) コンセンサスが遅れているノードがある場合、チャンク追跡テーブルは 異なるノードで分岐し、間違ったチャンクが割り当てられた コンセンサスリーダーの変更について。その結果、ノードは既に生成をスタート可能性があります 使用されたシーケンス番号。この修正により、テーブルが分岐しないことが保証されます。

  • gallocシーケンスのローカルチャンク情報の破損を修正(RM11932、RT66294) すべての場合において、新しいチャンクのリクエスト時にエラーが正しく発生することを確認してください 失敗した場合、そうでない場合は、ローカルにシーケンスに偽のチャンクを割り当てる可能性があります シーケンス番号が重複して生成される可能性があります 異なるノード。

  • コンセンサスワーカーイベントループがメッセージで停止する場合がある問題を修正 到達不能または応答しない同等なに再ノードしようとした場合のブローカー ソケットの読み取り可能性/書き込み可能性チェックをより防御的にすることにより libpq非同期接続確立フェーズ。 (RM11914)

    • この問題は、同等なの基盤となるホストがハード障害を起こし、すべてのTCP要求への応答を停止した場合、またはピアのネットワークがタイムリーなICMP Destination Unreachableメッセージを報告する代わりに同等なにトラフィックをブラックホール化した場合に発生する可能性が最も高くなります。

    • 影響を受けるノードでの問題の影響により、ストールまたはまったく機能しないコンセンサスが必要な操作が発生しますDDLロックの取得、Eagerトランザクションコミット、bdr.get_consensus_status()ファンクションの呼び出し、gallocシーケンスチャンクアロケーション、リーダー選出、 BDRグループスロットの前進。これは、偽のロックタイムアウトエラーまたはBDRグループスロットの遅延の増加としてユーザーに可視された可能性があります。

  • グローバルロックとDMLの競合条件を修正(RM12042) DMLに対するロック操作の順序付けの不一致を防ぐ 3つ以上の同時書き込みノード。これにより、適切に マルチプルのライタからの同時DMLからTRUNCATEを保護します ノード。

  • 透過プロキシ(EE)をサポートするためにlocal_node_idのレポートを繰り返します (RM12025、RM12033) CAMOを有効にすると、 BDRはbdr.local_node_id GUCをレポートします クライアント。 HAproxyなどの透過的なプロキシを完全にサポートするために、 BDRはこれを報告するようになりました transaction_idと組み合わせてトランザクションごとに1回、 クライアントが保証 ()から誤った結果を結果ないようにする 透過的接続スイッチの欠落によって引き起こされた古いキャッシュのため。

  • インスタンスのリスタートまたはクラッシュ後のグローバルDDLおよびDMLロックのリカバリを修正 (RM12042) BDRの以前のバージョンは、グローバルに対する書き込みを正しくブロックしない可能性があります ロックの取得後にノードまたは適用ワーカーが再起動した場合はロックします。 これにより、保護されたコマンドの場合に、データの相違が生じる可能性があります データを同時に変更していました。

  • レプリケーション変更のグローバルDDLおよびDMLロックブロックを修正(RM12042) BDRの以前のバージョンは、ロックされたサーバーへの変更のレプリケーションを続行します 他のノードからのテーブル。これにより、一時的なレプリケーションエラーが発生したり、 グローバルを取得したトランザクションが 遅延のあるノードにはロックが適用されます。

  • 適用ワーカーで取得したグローバルロックのクリーンアップ/リカバリのハングを修正 別のノードのグローバルロックを取得した適用ワーカーは、終了時に ハングしているロックをリークし、異なるバックエンドによって「盗まれる」可能性があります。 これにより、適用ワーカーは同じロックのロック取得を待機する可能性があります リスタート後は永久に。

  • 永久にfreezeLimitを保持しない(EE)(RM11783) BDRのEnterprise Editionは、十分な情報を保証にフリーズポイントを保持します 競合の解決に常に利用できます。しないでください 可用性が失われないように、xid周回ワーニング制限を超えてフリーズを保持します。 バキュームフリーズストームのリスクを回避するために、制限をスムーズに進めることができます。

  • bdr.run_on_all_nodesの接続を適切に閉じる bdr.run_on_all_nodesのときに同等なによってリセットされた接続に関するログspamを削除します。 使用されます。

  • CREATE MATERIALIZED VIEWがまだサポートされていないドキュメントを明確にします。 (RT66363)

BDR 3.6.10

BDR 3.6.10は、 BDR 3.6シリーズの10番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • CAMOの新しいオプショナルのパフォーマンスモードを追加-remote_write(EE)(RM6749) このリリースでは、CAMO remote_writeモードが有効になり、より迅速に CAMOからのコミットメッセージの受信時のフィードバック トランザクションの適用後のみではなく、パートナー。 堅牢性のわずかな損失と引き換えに、大幅に向上しパフォーマンス。

  • パートナーが追いつくまで(EE)(RM9605 / RT65000 / RT65827)までCAMOモードへの切り替えを延期する 可用性を向上させる非同期モードでは、 スイッチは CAMOパートナーに到達できない場合のローカルモード。いつ 切り替えて、合理的にできる前に追いつく必要があるかもしれません オリジンからの新しいトランザクションを確認します。オリジンは現在、 CAMOモードへのスイッチを遅らせるためのキャッチアップ時間の推定 まだCAMOパートナーによるタイミングのトランザクションを排除する 追いつく。

  • 関数wait_for_apply_queueおよびwait_for_camo_partner_queue(EE)を追加します 既に受信したが現在はトランザクションを待つことができます アプリケーションのキューに入れられました。これらは、古い読み取りを防ぐために使用できます remote_writeモードで複製されたBDRノード。

  • レプリケーションのモニタリング、特に同等な(EE)のキャッチアップ推定に関する改善(RM9798) 2つの新しいビューbdr.node_replication_ratesおよびbdr.node_estimatesを導入 同等なのノードからの妥当な推定値を取得するには このローカルノードからWALを適用します。 bdr.node_replication_ratesビュー 発信レプリケーションアクティビティの全体像を提供します bdr.node_estimatesはキャッチアップに焦点を当てているのに対し、平均適用レート 同等なの推定。

  • テーブルパーティション(EE)の列レベルの競合解決をサポート(RM10098、RM11310) 新しく作成または接続されたパーティションがCLCD用に設定されていることを確認してください 親テーブルのCLCDが有効になっています。

  • 少ないケースでグローバルDMLロックを取得します(RM9609)。 現在のトランザクションで作成されたリレーションをグローバルにロックしないでください。また、 テーブルではないリレーション(ビュー例) レプリケーション経由でデータを取得します。

解決された問題

  • プライマリキーのパートである列にexternalストレージパラメータを設定することを禁止します(RM11336)。 このような設定では、UPDATEをプライマリキーとして複製できませんでした PostgreSQLによってデコードされません。

  • check_full_tuple = trueのABA問題を防止します。 (RM10940、RM11233) bdr.inc_row_version()トリガーが存在する場合にのみ、行全体のチェックを行います UPDATEの競合を検出する際のABAの問題を防ぐための今後のテーブル check_full_tupleがtrueに設定されている場合、データは変更されませんでした。

BDR 3.6.9

BDR 3.6.9は、 BDR 3.6シリーズの9番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

解決された問題

  • gsumおよびpnsum CRDTタイプのクラッシュMIN / MAXを修正しました(RM11049)

  • 別れたノードが他のノードでbdr.part_node()を要求できないようにします。 (RM10566、RT65591)

BDR 3.6.8

BDR 3.6.8は、 BDR 3.6シリーズの8番目のマイナーリリースです。このリリースには、重大なデータロスの問題の修正と、以前のリリースで特定された他の問題の修正が含まれています。

改善

  • bdr.triggersビューの作成(EE)(RT65773)(RM10874) テーブル名前に関連するトリガーの詳細、 それを使用しているファンクション、どのイベントがトリガーされ、何が トリガータイプ。

解決された問題

  • 更新(EE)を複製するリモートノードでのTOASTデータの損失(RM10820、RT65733) 変換トリガーコードパスのバグが特定されました トースト列を設定する可能性(特定の非常に長い値 列)、リモートノードにUPDATEを適用する場合はNULL 変換トリガーは使用されていません。 BDR-EEのみが影響を受けます テーブルにトーストテーブルが定義されていて、使用していない場合のみ REPLICA IDENTITY FULL。 BDR3 SEはこの問題の影響を受けません。 LiveCompareは、損傷評価とデータリカバリによって強化されました 機能、詳細は別のTech Alertで提供されます 既知の影響を受けるユーザー。 このリリースでは、この問題によるさらなるデータロスを防ぎます。

  • CAMO:不注意によるタイムアウト(EE)につながるレースを排除します(RM10721) 競合条件により、CAMOパートナーからのコミット前確認が行われました 無視されます。これにより、CAMO保護の不注意なタイムアウトが発生しました トランザクションとパフォーマンスの低下との組み合わせ synchronous_replication_availabilityをasyncに設定します。この修正 リリース3.6.7で導入された問題。

  • CAMO:コミット時にトランザクションのキャンセルを適切にハンドル(EE)(RM10741) CAMOで保護されたトランザクションのCOMMITの中止を許可します(詳細 ノードのリスタートまたはPANICを使用した場合よりも優雅に)。ランタイムを有効にする CAMOペアをmakeのCAMOパートナーとの調整 最後には一貫性を持つます。

  • CAMO:ステータスクエリーファンクションでCAMOが有効になっていることを確認します。 (EE)(RM10803) logical_transaction_statusファンクションを使用すると、CAMOが無効になりました 単にクエリーのためではなく、セッション全体のために。に依存 CAMOクライアント(またはその間のプロキシ)がどのようにセッションを使用したか、これ CAMOが誤って無効になる可能性があります。これは 修正され、CAMOはこの呼び出しとは無関係に有効のままになります ファンクション

  • Eager:古いトランザクションをクリーンアップします。 (EE)(RM10595)

    • COMMITフェーズ中に中断されたトランザクションが確実に消去される

    • 最終的にすべてのノードで起動します。

  • VACUUMフリーズ制限を設定する際のTransactionId比較を修正。 これはエラーにつながる可能性があります:コミットされたxmaxをフリーズできません xid ラップで短期間、VACUUMが失敗します。 (EE)(RT65814、RT66211)

BDR 3.6.7.1

これは、3.6.7のホットフィックスリリースです。

解決された問題

  • 削除されたオリジンからの偽のトランザクション転送を防止します。 (RT65671、RM10605) オリジンの削除後、そのオリジンからトランザクションをフィルタリングします 出力プラグインではなく、それらを転送しようとするのではなく オリジン情報。

BDR 3.6.7

BDR 3.6.7は、 BDR 3.6シリーズの7番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • CAMOとEagerは、内部で二相コミット(2PC)を使用するように切り替えました。 これは内部的な変更であり、 デッドロックと2つのデータ相違の問題(以下を参照)。これは トランザクションのオリジンノードに影響するノードローカルな変更 排他的であり、 BDR間のネットワークプロトコルには影響しません ノード。 CAMOを実行するBDRノードでは、構成の変更が必要になりました 十分なmax_prepared_transactionsを許可します。 アップグレードを参照してください 詳細。の使用には制約がないことに注意してください PostgreSQLの明示的な2PCに存在する一時テーブル。

  • グローバルに割り当てられたレンジシーケンスを追加(RM2125) ノード間のコンセンサスを使用して範囲を割り当てる新しいシーケンスの種類 必要に応じて、各シーケンスの個々のノードへのシーケンス番号。 smallint、 整数 、bigintのすべてのシーケンスをサポート(シリアルを含む 列タイプ)。

  • Multi-Origin PITR Recovery(EE)の実装(RM5826) BDRは、すべてまたは一部のレプリケーション起点元のPITRを許可します 完全に一貫した視点を提供する特定の時点 ノードのすべてのサブセットにわたって。マルチオリジンの場合、WALをビューします すべてが1つの大きなストリームに混在するマルチプルのストリームを含むストリーム ストリームPITは1つだけですが、それは次のように到達します オリジンごとに別々のポイント。したがって、物理的を使用します マルチプルの個別のロジカル停止ポイントを使用したWALリカバリ 各オリジン。 WALでは1つのLSN「停止ポイント」になりますが、 また、1つのタイムスタンプが一貫して適用されます。 「単一オリジンPITR」で行います。

  • トランザクションレプリケーション制御用のbdr.xact_replicationオプションを追加 何に似た方法でトランザクション全体のレプリケーションをスキップすることができます bdr.ddl_replicationはDDLステートメントに対して実行しますが、すべての変更に影響します INSERT/UPDATE/DELETEを含む。 SET LOCALを介してのみ設定できます。 注意して使用してください!

BDRによって作成および管理されるレプリケーションスロットの偶発的なマニュアルドロップを防止

  • bdr.permit_unsafe_commandsオプションを追加して、それ以外の場合は無効にします コマンド(RM10148) 現在、 BDRレプリケーションスロットのマニュアルドロップのチェックをオーバーライドします エンタープライズ版。

  • bdr.ddl_replicationおよびbdr.ddl_lockingをbdr_superuserとして設定可能 SETコマンドを使用する これは、以前はラッパー関数を介してのみ可能でした。 まだbdr.set_ddl_replication()とbdr.set_ddl_locking() 利用できます。

  • コンセンサスメッセージングレイヤーのパフォーマンスの改善(RM10319、RT65396)

解決された問題

  • bdr.drop_nodeの追加のメタデータを削除(RT65393、RM10346) 以前はローカルノード情報の一部を保持していたため、 ノード名前の再利用。

  • 使用時にノード依存のメタデータを正しく同期する bdr_init_physical(RT65221、RM10409) 追加のレプリケーションセットとそれらのテーブルメンバーシップを次のように同期します。 bdr_init_physicalのストリームトリガーおよびシーケンス情報と同様に、 ロジカル同期と同様の方法で。

  • ネットワークの不具合によるCAMOとの潜在的なデータの相違を修正(RM#10147) これにより、ノード間で発生する可能性のあるデータの不整合が修正されます 到達不能または応答しない場合のCAMOペアの(ただし 操作可能)CAMOパートナーとCAMOオリジンの同時クラッシュ ノードCAMOによって保護されているトランザクションの実行中のCOMMITは、 1つのノードでコミットされましたが、 その他、両方のノードが動作して接続された後。

  • クロスCAMOペア間の潜在的なデッドロックを修正しました(RM#7907) 2つのノードを対称CAMOペアとして構成すると、可能だった ペアがデッドロックするために、両方のノードがダウンして再起動した場合、 ただし、どちらもCAMOトランザクションを実行中です。

  • クラッシュに直面したEagerトランザクションの潜在的なデータの相違を修正(RM#9907) Eagerトランザクションのオリジンノードがクラッシュした場合 最終的なローカルコミットの前に、そのようなトランザクションは終了した可能性があります upはオリジンで中止されましたが、他のすべてのノードでコミットされました。これは オリジンノードでも2PCを使用して適切に解決することにより修正 オリジンノードのリスタート後の実行中のEagerトランザクション。

  • 実行中のCAMOトランザクションによる高速シャットダウンの正しいハンドリング(RM#9556) 処理中のBDRノードでのPostgresの高速シャットダウン CAMOで保護されたトランザクションをコミットすると、以前はPANICになりました。 これは、機内CAMOトランザクションを使用して適切に処理されるようになりました そのノードのリスタート後も適切に回復されます。

BDR 3.6.6

BDR 3.6.6は、 BDR 3.6シリーズの6番目のマイナーリリースです。このリリースには、マイナーな新機能と以前に特定された問題の修正が含まれています。

改善

  • bdr.drop_node()を追加(RM9938) ローカルデータベースからノードメタデータを削除し、再利用できるようにする クラスター内のノード名前の。

  • bdr_init_physicalをBDRに含める-SE(RM9892) ラージノード結合時のパフォーマンスを改善しますBDR-EEにはこのツールが含まれています しばらくの間。

BDR -EEでbdr_init_physicalユーティリティを強化(RM9988) bdr_init_physicalを変更して、オプションで選択的なpg_basebackupのみを使用するようにします 全体のバックアップの以前の動作とは対照的に、ターゲットデータベース データベースクラスタ。このアクティビティをより速く完了させ、許可する必要があります 不要なデータベースが除外されるため、使用するスペースが少なくなります。

  • 切捨て複製トランザクション中にTRUNCATEが許可されるようになりました(RM9812)

  • 新しいbdr.global_lock_table()ファンクション(RM9735)。 リレーションのグローバルDMLロックを明示的に取得できます。特に便利 同時書き込みでTRUNCATEを使用する場合の競合を回避するため トランザクション。

  • 新しい競合タイプupdate_pkey_exists(RM9976) PRIMARY KEYが更新された場合の競合解決を許可します 変更を適用しているノードに既に存在します。

DDLロックをスキップしてメッセージをスキップし、ログレベルを下げる 以前の動作はあまりにも邪魔でした。

  • bdr.apply_log_summaryを追加(RM6596) 人間が読み取れる競合タイプを示すbdr.apply_logを表示し、 内部IDではなくリゾルバ文字列。

  • bdr.maximum_clock_skewとbdr.maximum_clock_skew_actionを追加します 構成オプション(RM9379) ノード間のクロックスキューをチェックし、ワーニングまたは遅延を適用するため クロックスキューが大きすぎる場合。

解決された問題

  • CRDT型演算子をパブリックスキーマからpg_catalogに移動します(RT65280、RM10027) 以前は、 BDR演算子はパブリックスキーマにインストールされていたため、 より厳しいセキュリティポリシーを実装するサーバーで使用します。アクションは不要です。

  • サポートされていないEager Replicationコマンドが現在実行されていたかどうかを覚えておいてください トランザクションの これにより、サポートされていないコマンドが実行された状況を防ぐことができます Eager Replicationがオフになり、トランザクションの後半で Eager Replicationがオンになっています。

  • crdt_pnsumデータタイプの「!」演算子を修正(RM10156) 列の値をリセットするための演算子ですが、前の バージョンでは、リセットオペレーションはこのタイプでは機能しませんでした。

BDR 3.6.5

BDR 3.6.5は、 BDR 3.6シリーズの5番目のマイナーリリースです。このリリースには、3.6.4で特定された問題の修正に加えて、マイナーな新機能が含まれています。

改善

  • CAMOの遅延有効化を許可(RM8886) bdr.enable_camoの設定は、 トランザクションのIDがすでにある場合でも、コミットの前の時間 割り当てられた。

  • シンプル比較演算子を使用して比較できるバージョン-2 KSUUIDを追加します (RM9662)

  • 新しいdelete_recently_updated競合タイプ(RM9673 / RT65063) オーダーで到着するDELETEオペレーションによってトリガーされます-DELETEには 行の最新のローカルUPDATEよりも古いコミットタイムスタンプ。することができます 常に勝利するDELETEのデフォルトポリシーをオーバーライドするために使用されます。

  • bdr管理ファンクションのレプリケーションをDDLレプリケーションフィルターに準拠させる(RT65174) bdr.replication_set_add_tableのようなコマンドが複製されないように 最初にCREATE TABLEを複製しなかったノードに。

  • すべてのノードでグループレプリケーションセットを常にサブスクライブする必要はありません(RT65161) DDLレプリケーションフィルターを管理機能に適用するようになったため、 グループレプリケーションセットを強制的にすべてのノードによってサブスクライブさせるために必要 管理ファンクションを複製するように他のレプリケーションセットを構成できます 呼び出します。

  • さらにいくつかのDDL操作でグローバルDMLロックをスキップできるようにする 次のDDL操作は、 グローバルDDLロック、DMLロックではない:

*   - ALTER TABLE .. ALTER COLUMN .. SET STATISTICS
  • -ALTER TABLE .. VALIDATE CONSTRAINT-ALTER TABLE .. CLUSTER ON-ALTER TABLE .. RESET-CREATE TRIGGER

  • DELETEで外部キーの異常を解決する新しいBDRトリガーを追加(RM9580)

  • 新しいファンクションbdr.run_on_all_nodes()を追加して、モニタリングと診断を支援します(RM9945)

  • CでCAMOリファレンスクライアントを拡張する テストトランザクションのbdr.commit_scopeの設定を許可します。

  • CLUSTERコマンドのレプリケーションを防止して、運用へのインパクトを回避

  • セキュリティおよび一般的な診断を支援するため、スキップするDDL ユーザ要求でのレプリケーションまたはグローバルDDLロックがログに記録されます。定期的に レプリケートされていないおよび/またはログに記録されていないDDLのユーザーは、これによりログの量を増やすことができます。 一部のログメッセージのフォーマットが変更されました。この変更は、次の場合に有効になります。 bdr.ddl_locking = offおよび/またはbdr.ddl_replication = off。

  • (RM8345)に関するBDR管理機能の説明を大幅に強化 運用上のインパクト、レプリケーション、ロック、トランザクションの性質

  • 同時主キー更新シナリオを説明する詳細なドキュメント(RM9873 / RT65156)

  • bdr.replication_set_add_ddl_filter()の使用例のドキュメント(RM9691)

解決された問題

  • レプリケーションセット定義のレプリケーションのリワーク(RT64451) レプリケーションセットが一部のノードから消える問題を解決します。 特定の状況で発生する可能性があります。

  • これらのDDLコマンドのグローバルDMLロックを取得して、正確性を確保する(RM9650)

  • 一意のインデックスを同時に作成

  • インデックスの同時削除

  • bdr.drop_trigger()管理ファンクション 制約を追加または削除すると、レプリケーションを停止するDMLが許可される可能性があるため

  • Raftコードで別れている、または別れているノードを正しく無視します(RM9666 / RT64891) ノードメンバーシップの変更の過剰なロギングを削除します。

  • update_recently_deletedでCRDT / CLCDマージを試行しないでください(RM9674) 厳密に行レベルの競合です。マージを行うと、間違った結果が生成されます。

  • standard_conforming_strings = offを必要とするBDRアプリを許可する(RM9573 / RT64949)

  • レプリケーションスロットメタデータを使用して行の凍結を延期する(RM9670)(EEのみ) そうしないと、一定期間後にupdate_origin_changeの競合が検出されない場合があります ノードのダウンタイムまたは切断。 SEバージョンでは、パラメーターを使用してのみこれを回避できます。

  • bdr_wait_slot_confirm_lsn()を修正して、最後のコミットのLSNを待つ 現在の書き込み位置のLSNより。いくつかのケースでは、それが解放された可能性があります 適切なよりも早く待機し、他の場合は遅延する可能性があります。

BDR 3.6.4

BDR 3.6.4は、 BDR 3.6シリーズの4番目のマイナーリリースです。このリリースには、3.6.3で特定された問題の修正に加えて、マイナーな新機能が含まれています。

BDR 3.6.4のハイライト

  • 統計追跡の適用(RM9063) 個人のレプリケーションとリソース使用に関する統計を追跡するようになりました サブスクリプションとリレーションを使用して、 pglogical.stat_subscriptionおよびpglogical.stat_relationビュー。 追跡はpglogical.stat_track_subscriptionを介して設定できます およびpglogical.stat_track_relation構成パラメーター。

  • Eager All Node ReplicationでCAMOクライアントプロトコルをサポート クエリーを拡張して、 グローバルコミットスコープで複製されたトランザクションのステータス(Eager All ノード複製)。 Eager All Node Replicationのサポートを追加 Java CAMOリファレンスクライアント。

解決された問題

  • マルチレベルテーブルパーティションの初期データコピーを修正(RT64809) 単一レベルのパーティショニングのみをサポートするために使用される初期データコピー。 マルチプルレベルのパーティショニングがサポートされるようになりました。

  • 状況によっては、パーティションの初期データを2回コピーしないでください(RT64809) にあるすべてのテーブルからコピーデータしようとするために使用される初期データコピー パーティショニングを適切に考慮しないレプリケーションセット。これにより、 ルートパーティションと個別の両方の場合、パーティションデータが2回コピーされる レプリケーションセットを介してパーティションが公開されました。これは解決されました。私たちだけ ルートパーティションが公開されている場合は、最初のコピーを実行します。

  • INSERTをパーティションに複製するときのインデックスのハンドリングを修正(RT64809) すべての状況でインデックスを正しく成約ます。

  • パーティショニングテストのカバレッジを改善(RM9311) パーティショニング関連の問題を考慮して、 テーブルパーティションに対して行われた自動テスト。

  • crdt_pnsumデータタイプのマージを修正(RT64975) 内部インデックスが誤って処理されたため、セグメンテーションが発生する可能性があります 障害;これは解決されました。 BDR拡張機能がインストールされていないデータベースでキャッシュルックアップが失敗する問題を修正(RM9217) 以前は、 PostgreSQLでテーブルを削除するときにエラーが発生する可能性がありました BDRライブラリがロードされているが、拡張子がないインスタンス インストール済み。

  • bdr.subscription_summaryのパーミッションの問題を修正(RT64945) pglogical.get_sub_progress_timestamp()に対する権限は必要ありません このビューはもう使用しません。

  • 障害発生後に準備されたEager All Nodeトランザクションのクリーンアップ(RM8996) 未完了のトランザクションによる不整合とハングを防止します ノードまたはネットワークの障害後。 Raftを使用して一貫性を保証します このようなダングリングのクリーンアップのためにノード間で準備 トランザクション。

その他の改善

  • replicate_insertsオプションが初期COPYに影響するようになりました テーブルが挿入を複製する場合にのみ、データの初期コピーを行います。

  • Raftワーカー内の内部ノード管理のログレベルを下げる(RT64891) これは、ノードへの結合または分離中に不必要にログをスパミングしていました。 DDLレプリケーションまたはDDLロックなしでDDLを実行するときに警告する DDLレプリケーションまたはロックなしで実行されるDDLコマンドは、 異なるデータベースとレプリケーションエラーの原因となるため、慎重に警告する それらについて。

  • dmlロックなしで統計の作成を許可(RM9507)

  • ドキュメントの正しいデフォルト設定を反映するように文書を変更します update_missing競合タイプ。

BDR 3.6.3

BDR 3.6.3は、 BDR 3.6シリーズの3番目のマイナーリリースです。このリリースには、3.6.2で特定された問題の修正に加えて、マイナーな新機能が含まれています。

BDR 3.6.3のハイライト

  • CRDTタイプのbtree /ハッシュ演算子クラスを追加(EE、RT64319) これにより、CRDT列にインデックスを構築できます(スカラ値を使用) そして、シンプル等式/不等式句を使用してそれらをクエリし、 in GROUP BY句など。

  • CRDT総和タイプ(EE、RT64600)のint4 / int8からの暗黙的なキャストの追加 整数型とCRDT総和型の式を一緒に使用して入力できるようにします。例:

解決された問題

  • グローバルDMLロックにグループロックを使用する(RT64404) これにより、グローバルDMLロッカーとライター間の連携が向上します。 残りの変更に追いついています。

その他の改善

  • レガシーCRDTタイプとbdrスキーマにある新しいCRDTタイプの混在使用をサポート 暗黙的に2つの間をキャストするため、混在使用と潜在的な移行 透明です。

  • 静的コードスキャンの改善 すべてのビルドは、CoverityとClangスキャンビルドの両方でスキャンされます。

  • bdr.ddl_replicationおよびbdr.ddl_lockingの変更のログ 異なるDDLが実行されたときのトラブルシューティングに役立ちます。 文書と_ PDF文書。これは主にドキュメントの構造化方法を変更します チャプターリストの単一のソースと順序付けのために PDFとHTMLの両方のドキュメント。

BDR 3.6.2

BDR 3.6.2は、 BDR 3.6シリーズの2番目のマイナーリリースです。このリリースには、マイナーな新機能と3.6.1で特定された問題の修正が含まれています。

BDR 3.6.2のハイライト

  • すべてのSQL可視インターフェースがbdrスキーマ(EE)に移動しました CRDTタイプと列ごとの競合解決インターフェイスは、 bdr_crdtおよびbdr_conflictsではなく、bdrスキーマ。タイプとパブリック インターフェースは、既存のスキーマとの互換性のためにそれらのスキーマにまだ存在しています インストール、ただし、現在は非推奨となっているため、使用は推奨されません また、将来のリリースで削除される可能性があります。 bdrスキーマにあるものを使用してください。 ドキュメントには現在、bdrスキーマへの参照のみが含まれています。

  • bdr.node_conflict_resolversビューを追加(RT64388) ローカルの競合タイプごとに現在の競合リゾルバ設定を表示します デフォルトを含むノード。

  • CおよびJavaのCAMOリファレンスクライアント実装を文書に追加します。

  • DEFERRED UNIQUEインデックスをサポート このリリース以前は、限られた場合にのみ機能していました。

解決された問題

  • リーダー選出中のコンセンサスリクエストのタイムアウトを修正(RT64569) リーダーが不明な場合にタイムアウトが適用されず、即時につながりました コンセンサスを必要とするアクションの失敗(グローバルDDLロック例)。 これは解決されました。 DDLロックオペレーション中の障害時のクリーンアップを改善します。これにより、 DDLが高速化されます。 エラーがカスケードを作成しないように、エラー後にサブシステムのリカバリをロックする 効果。

  • 管理ファンクションコマンドのレプリケーションを統合(RT64544) これにより、管理ファンクションのレプリケーションおよびロック動作が行われます。 コマンドは、ロジカルスタンバイを含むすべての状況でDDLとよりインラインになります。

  • UNIQUEインデックスのカバーをサポート(RT64650) 以前は、UNIQUEインデックスをカバーするとあいまいなエラーが発生する可能性がありました 場合によってはメッセージ。

  • いかだタイミングの単調なタイムソースへの切り替え(RM6390) これにより、時間のジャンプがある場合のRaft内部タイミングの信頼性が向上します。 NTPdなどが原因です。その結果、一般的にいかだの信頼性が向上します。

  • 内部コネクションプーラのロックを改善 ノード間のメッセージングの信頼性を高めるため。

  • リスタートにコンセンサスプロトコルバージョンを復元する(RT64526) これにより、コンセンサスワーカーまたはノードが毎回再交渉する必要がなくなります。 再起動され、機能が一貫して新しいプロトコルバージョンに依存するようになります 再起動後も利用可能です。

  • 使用時のbdr.enable_camoの自動無効化と再有効化を修正 トランザクションのDDL 。同じ内で手動で再度有効にできないことを確認してください トランザクションの

  • オリジンが始まる前に早く到着するCAMO確認のハンドリングを修正 待つ。これにより、このような確認が無視されることによるタイムアウトが防止されます。

BDR 3.6.1

BDR 3.6.1は、 BDR 3.6シリーズの最初のマイナーリリースです。このリリースには、3.6.0.1および3.6.0.2のすべての修正を含む、マイナーな新機能と修正が含まれています。

3.6.1のハイライト

  • bdr.role_replication構成オプションの追加(RT64330) 新しいオプションは、ロール管理ステートメント(CREATE/ALTER/DROP/GRANT ROLE)のレプリケーションを制御します。ロール管理ステートメントはまだDDLレプリケーションの標準ルールに従っているため、このオプションはbdr.ddl_replicationに依存しています。デフォルトでは、これはonに設定されています。つまり、これらのステートメントは、 BDR対応データベースで実行されると複製されます。

  • --standbyオプションをbdr_init_physicalに追加(RM8543、EE) bdr_init_physicalを使用してロジカルスタンバイを作成できます。 以前は、この方法では完全な送信/受信ノードのみを作成できました。

  • last_xact_replay_timestampをbdr.subscription_summaryに追加(RT63881) サブスクリプションによって最後に再生されたトランザクションのコミットタイムスタンプを示します。

  • 回復不能なエラーで結合を停止する(RT64463) 構造の同期中に結合が失敗する可能性がありますが、現在は回復不能なエラーです。他の(一時的な)エラーのように再試行する代わりに、パートノードを分離して、エラーがあったことをユーザに通知します。

解決された問題

  • トリガーセキュリティチェックの改善(RT64412) トリガーがbdrまたはpglogicalトリガー関数、セキュリティ定義関数(とにかくセキュリティを再定義する関数)を使用する場合、トリガーがテーブルとは異なる所有者を持つことを許可し、ノード結合中の初期レプリケーションセット同期中にレプリケーションセットメンバーシップの変更を常に許可します。 BDRの複製されたコマンドをbdr.ddl_replicationに従う(RT64479) いくつかのBDRファンクション呼び出し(bdr_conflicts.column_timestamps_enableなど)は、必要に応じてDDLロックを含む通常のDDLコマンドと同様の方法で複製されます。ただし、 BDRの以前のバージョンのこれらのコマンドは、bdr.ddl_replication設定を無視し、常に複製されていました。これは修正されました。さらに、通常のDDLと同様に、これらのコマンドはロジカルスタンバイから複製されません。

  • グローバルオブジェクトで汎用コマンドを複製しようとしないでください グローバルオブジェクトのいくつかのコマンドは、それらが内部的にどのように表現されているかによって、本来あるべきではない状況でも複製されます。次のコマンドの処理が修正されました。

  • ALTER ROLE/DATABASE/TABLESPACE ... RENAME TO

  • ALTER DATABASE/TABLESPACE ... OWNER TO

  • COMMENT ON ROLE/DATABASE/TABLESPACE

  • SECURITY LABEL ON ROLE/DATABASE/TABLESPACE

  • CAMOパートナーで適切にタイムアウトし、ローカルモードにスイッチます(RT64390、EE) 他のBDRノードの接続ステータスを無視し、指定されたCAMOパートナーノードに障害が発生したらすぐにローカルモードにスイッチます。 4ノード以上のクラスターでローカルモードへのスイッチを機能させます。

BDR 3.6.0.2

BDR 3.6.0.2リリースは、 BDR 3.6シリーズの2番目のバグ修正リリースです。

解決された問題

  • 最初のDDLでのCAMOの動的な無効化(EE、RT64403)

  • Raftsnapshotを復元する際のタイミングの問題が原因でノード結合がハングする問題を修正(RT64433)

  • トリガーファンクションの所有権チェックを修正(RT64412)

  • wait_for_completion := falseでpromote_nodeおよびjoin_node_groupの動作を改善

BDR 3.6.0.1

BDR 3.6.0.1は、 BDR 3.6シリーズの最初のバグ修正リリースです。

解決された問題

  • 透過パーティショニング(EE)のtarget_table_missingの競合をサポート(RT64389)

  • メッセージブローカーがメッセージを破棄することがある問題を修正(一般的な副作用はDDLロックタイムアウトです)

  • ラフトプロトコルネゴシエーションの改善

  • トレースコードのメモリーリークを修正

  • 同期的remote_writeレプリケーションパフォーマンスの改善(RT64397)

  • CLCD(EE)のコミットタイムスタンプバリアントハンドリングを修正

  • バイナリプロトコルのサポートを再追加

  • synchronous_replication_availability = 'async'(EE)を使用したCAMOの正しいローカルモード

  • サポートされていない操作をCAMO(EE)と組み合わせて禁止し、ヒントを提供します。

  • logical_transaction_statusのデッドロックを修正(EE)

BDR 3.6.0

BDR3のバージョン3.6は、CAMOの改善、パフォーマンスの改善、競合ハンドリングの改善、バグ修正をもたらすメジャーアップデートです。

BDR 3.6のハイライト

BDR RemoteWriteモードを区別し、write_lsnを設定します - レプリケーションパフォーマンスの大幅な改善 - キャッシュテーブルの同期状態 - 必要な場合にのみキープアライブを送信します - 必要な場合にのみフラッシュを行う - wal sender(2ndQPostgres)でより少ないケースでトランザクションをシリアル化します - 物理的ストリーミングレプリケーションがレポートする方法により沿った、レプリケーション位置レポートの改善 - 競合の検出と解決の改善 - 新しいタイプの競合(target_table_missingなど)を追加する - 新しいタイプの競合リゾルバーを追加します - ノードおよび競合タイプごとに競合解決を構成可能にします - 更新の競合検出を改善する - CAMO構成の簡素化(EE) - CAMO(EE)のパフォーマンスの改善

解決された問題

  • リプレイラグの報告を修正(RT63866)

  • トランザクション内の同じ行の繰り返しUPDATEに対するCRDTと競合トリガーを修正します(RT64297)

  • 一時インデックスのREINDEXを複製しようとしないでください

その他の改善

  • いかだテーブルのバキュームハンドリングの改善

  • CAMO文書(EE)の改善と明確化