Pgpool-II 4.4.10 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2023-05-18
マルチステートメントのクエリを判定するために、psqlscanのソースコードをPgpool-IIにインポートしました。(Tatsuo Ishii)
psqlscanは、PostgreSQLソースツリー内のモジュールです。 これは本質的にPostgreSQL SQLスキャナのサブセットですが、各SQLステートメントの終わりの検出に特化しています。 したがって、これを使用してクエリ文字列内のSQLステートメントの数をカウントできます。
議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/04291.html 議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-April/004320.html
複数のステートメントを幅広く使用できるようにしました。 (Tatsuo Ishii)
このコミットは、複数のステートメント (マルチステートメント) に関するPgpool-IIの長年の制限を排除しました。
議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/004287.html
内部クエリでスキーマ修飾を使用するように変更しました。(Tatsuo Ishii)
関数やキャストなどの一部のオブジェクトは、「pg_catalog.」スキーマ修飾を使用していませんでした。 これによって直ちにセキュリティ上の懸念が生じるわけではありませんが、スキーマ修飾を使用することは常に良い習慣ですので、変更しました。
共有リレーションキャッシュで発生しうるデッドロックを修正しました。(Tatsuo Ishii)
ユーザー定義関数がテーブルロックを取得する場合、拡張クエリプロトコルを使用して関数を呼び出すとデッドロックが発生する可能性がありました。 以下にシナリオを示します。
(1) セッション中クライアントはparse、bind、executeリクエストをpgpoolに送信します。
(2) セッションAのPgpool-IIはリクエストをPostgreSQLに転送します。
(3) セッションAのPostgreSQLがexecuteを実行し、テーブルロックが発生します。
(4) セッションBで、クライアントは関数のparse、bind、executeリクエストをpgpoolに送信します。
(5) セッションBのPgpoolはリクエストをPostgreSQLに転送します。
(6) セッションBのPostgreSQLはbindを実行しますが、テーブルはセッションAのPostgreSQLによってすでにロックされており、ロックの解放を待ちます。
(7) セッションBのpgpoolはexecuteをPostgreSQLに転送した後、関数の揮発性をチェックするために共有リレーションキャッシュを検索するためのセマフォを取得します。 次に、do_queryを呼び出し、フラッシュメッセージをPostgreSQLに送信して、この時点までのPostgreSQLからの応答を取得します。 ただし、#6ではPostgreSQLがテーブルロックを待機しているため、pgpoolはバインド完了後のメッセージを待つ必要があります。
(8) セッションAのpgpoolがPostgreSQLにexecuteを転送した後、関数の揮発性をチェックするために共有リレーションキャッシュを検索しセマフォを取得しようとしましたが、セマフォはセッションBのpgpoolによってすでに取得されているため、セマフォの解放を待ちます。
(9) セッションAとセッションBがお互いを待機するため、デッドロックが発生します。
これを修正するには、do_query()を呼び出す前にセマフォを解放するようにpool_search_relcache()を変更しました(ただし、セマフォはdo_query()の後に取得します)。 これにより、上記#8のセッションAはセマフォを取得し、先に進むことができます。 クライアントからsyncメッセージを受信し、PostgreSQLに転送します。 syncを受信すると、ユーザ定義関数は実行を終了し、テーブルロックを解放します。 これにより、セッションBのPostgreSQLがテーブルロックを取得できるようになります。
prefer_lower_delay_standbyの不具合を修正しました。(bug 798) (Tatsuo Ishii)
クライアントがPgpool-IIに接続すると、スタンバイの1つがロードバランシングノードとして選択されます。 セッションの継続中にスタンバイ遅延がdelay_thresholdを超えた場合、prefer_lower_delay_standbyは遅延が最小のスタンバイノードを新しいロードバランシングノードとして選択し、ターゲットバックエンドをそのノードに設定します。 残念ながら、SELECTクエリに書き込み機能などが含まれているかどうかを確認する前に決定が下されたため、Pgpool-IIはスタンバイで実行できないSELECTを送信していました。 これを修正するために、prefer_lower_delay_standbyの処理を書き込み関数等のチェック後に移動しました。
また、上記のケースを含めるように033.prefer_lower_standby_delay回帰テストも修正しました。
musl libcを使用するシステムでのコンパイルエラーを修正しました。(bug 790) (Tatsuo Ishii)
パッチはleimaohuiによって提供されました。
複数のクエリキャッシュの不具合を修正しました。(Tatsuo Ishii)
議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-January/004259.html
特殊なケースでsrワーカーが間違ったクエリをスタンバイサーバに送信する不具合を修正しました。(Tatsuo Ishii)
ALWAYS_PRIMARYフラグが設定されている場合、PRIMARY_NODE_IDマクロは、プライマリがダウンしている場合でも、-1ではなくノードIDを返していました。 この場合、ストリーミングレプリケーション遅延をチェックするワーカープロセスは、PostgreSQLのバージョンに応じてSELECT pg_current_wal_lsn()またはSELECT pg_current_xlog_location()をスタンバイに送信し、当然エラーが発生していました。
議論: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/004279.html
DEALLOCATEによる種類不一致エラーを修正しました。 (bug 780) (Tatsuo Ishii)
以下の条件がすべて満たされた場合、種類不一致エラーが発生していました。
ストリーミングレプリケーションモード
ロードバランスノードがプライマリ以外のノード
PREPAREがマルチステートメントクエリで使用されている
回帰テストのコンパイルエラーを修正しました。(Takuma Hoshiai)
gcc10を使用したタイムスタンプテストでエラーが発生していました。
show pool_versionで行の説明が2回表示される問題を修正しました。(Tatsuo Ishii)
wd_priorityの説明を追加しました。(Chen Ningwei)
PREPARE/EXECUTE/DEALLOCATEに関する制限を追加しました。(Tatsuo Ishii)
Pgpool-IIで-Dオプションを使用する場合の注意点を追加しました。(Tatsuo Ishii)
「RPMからのインストール」セクションを強化しました。(Bo Peng)
「サーバの準備と運用」の章に「PostgreSQLデータベースのバックアップ」セクションを追加しました。(Tatsuo Ishii)
「Pgpool-II + Watchdogの構築の例」から「-D」起動オプションの設定を削除しました。(Bo Peng)
「制限事項」セクションを修正しました。(Tatsuo Ishii)
SCRAM-SHA-256認証に関する記述を追加
スナップショットアイソレーションモードに関する記述を追加
PostgreSQLノードのステータスが「unknown」と表示される場合の説明を追加しました。(Tatsuo Ishii)
pcp_promote_node実行時に、プロモートするターゲットノードが稼働中の必要であることを記載しました。(Tatsuo Ishii)
AES256をサポートするには--with-opensslオプションが必要であることを記載しました。(Tatsuo Ishii)
.pcppassを使用するには、pcpコマンドの-wオプションが必要であることを記載しました。(Tatsuo Ishii)
「2.8 insert_lockテーブルの作成」セクションを修正しました。(Tatsuo Ishii)
スナップショットアイソレーションモードについても言及する必要があったのに、ネイティブレプリケーションモードについてのみ言及していました。
SHOW POOL_CACHEを強化しました。(Tatsuo Ishii)
設定ファイルの末尾にいくつかのパラメータを追加するようにpgpool_setupを修正しました。(Bo Peng)
071.execute_and_deallocate/test.shをリファクタリングしました。(Tatsuo Ishii)
いくつかの回帰テストを強化しました。(Tatsuo Ishii)
時折発生する005.jdbcテストの失敗を修正しました。(Tatsuo Ishii)