Pgpool-II 4.5.4 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2023-12-12
このリリースでは、マルチステートメントの適用範囲や、一部のセッション切断問題など、いくつかの長年の問題が解決されました。 また、構成と管理を容易にするために、多くの機能拡張も追加されています。
主な機能拡張は以下の通りです。
クエリ文字列内でより多くの場合にマルチステートメントを使用できるようになりました。
PREPARE/EXECUTE/DEALLOCATEの負荷分散が可能になりました。
delay_threshold_by_timeをミリ秒単位で設定できるようになりました。
フェイルオーバ、フェイルバック、およびバックエンドエラー発生時の一部のセッション切断問題を改善しました。
特定のユーザ接続からの参照クエリを特定のバックエンドノードに振り分けできるようになりました。
pcp_socket_dirで複数のディレクトリを指定できるようになりました。
PostgreSQL 16のSQLパーサを取り込みました。
次の通常のERRORメッセージをDEBUGメッセージにダウングレードしました。(Bo Peng)
次の2つのメッセージは、クライアントがpgpoolへの接続を切断する前に終了メッセージを送信しなかった場合に発生します。 たとえば、クライアントプロセスが強制終了された場合に、このエラーが発生します。これらのメッセージは無害ですが、場合によってはユーザを混乱させる可能性があります。
ERROR:unable to flush data to frontend
ERROR: unable to read data from frontend DETAIL: EOF encountered with frontend
client_idle_limitがゼロ以外の値に設定されている場合、クライアントが前回のクエリからアイドル状態のままでいるときに、コネクションは切断されます。 このコネクションの切断はPgpool-IIの設定によるものなので、ERRORではなくDEBUGとして処理すべきです。
ERROR: unable to read data DETAIL: child connection forced to terminate due to client_idle_limit:30 is reached
PCPコマンドで-w/--no-passwordオプションを指定しなくても、パスワードファイル (~/.pcppass) に格納されたパスワードを使用するように動作を変更しました。(Chen Ningwei)
以前はパスワードファイル (~/.pcppass) に格納されたパスワードを使用するために、-w/--no-passwordオプションを指定する必要があり、PostgreSQLの動作と一致していませんでした。
パラメータwd_escalation_command用のサンプルスクリプトescalation.sh.sampleでSSH接続時のタイムアウト時間を指定するようにしました。(Bo Peng)
delay_threshold_by_timeをミリ秒単位で設定できるようにしました。(Tatsuo Ishii)
以前は秒単位での設定のみが許可されていました。リファクタリングも行いました。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-August/004372.html
PostgreSQL 16の新しいパーサーを取り込みました。(Chen Ningwei)
PostgreSQL 16パーサーの主な変更点は次のとおりです。
COPY FROMに新しいオプションDEFAULTが追加されました。
COPY ... FROM stdin WITH (default 'xx');
CREATE TABLEでSTORAGEタイプを指定できるようになりました。
CREATE TABLE t1 ( c1 VARCHAR(10) STORAGE PLAIN, c2 TEXT STORAGE EXTENDED );
パラメータ化されたクエリの汎用プランを表示するために、EXPLAINオプションGENERIC_PLANが追加されました。
EXPLAIN (GENERIC_PLAN) SELECT ...;
FROM句のサブクエリでエイリアスを省略できるようになりました。
SELECT COUNT(*) FROM (SELECT ... FROM ...);
SQL/JSONコンストラクターが追加されました。
VACUUMオプションが追加されました。 凍結されたすべての統計情報をスキップまたは更新するVACUUMオプションSKIP_DATABASE_STATS、ONLY_DATABASE_STATSが追加されました。 TOASTテーブルのみを処理するVACUUMオプションPROCESS_MAINが追加されました。
VACUUM (SKIP_DATABASE_STATS); VACUUM (PROCESS_MAIN FALSE) t1 ;
新しいフィールドload_balance_nodeをSHOW POOL_POOLSとpcp_proc_infoに追加しました。(Tatsuo Ishii)
クライアントセッションがロードバランスノードとして使用されている場合は、load_balance_nodeフィールドが「1」になります。 これらのコマンドを実行することで、バックエンドをロードバランスノードとして使用するセッションであるかどうかを確認できます。 その場合は、バックエンドをシャットダウンするとセッションが切断される可能性があります。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-July/004353.html
フェイルオーバ、フェイルバック、およびバックエンドエラー発生時の一部のセッション切断の問題を軽減しました。(Tatsuo Ishii)
以前は、Pgpool-IIはさまざまな場合にクライアントセッションを切断していました。 このリリースでは、フェイルオーバ、フェイルバック、およびバックエンドエラーの発生時に、ダウンしたバックエンドがプライマリまたはメインノードではなく、ロードバランスノードでもない一部の場合に、セッションを切断しないようになりました。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-July/004352.html
特定のユーザからの参照クエリを特定のバックエンドノードに振り分けできるように、user_redirect_preference_list設定パラメータを追加しました。(Bo Peng)
pcp_socket_dirで複数のディレクトリ指定できるようになりました。(Chen Ningwei)
PREPARE/EXECUTE/DEALLOCATEの負荷分散が可能になりました。(Tatsuo Ishii)
以前は、PREPARE/EXECUTE/DEALLOCATEは負荷分散されませんでした。 ストリーミングレプリケーション/論理レプリケーションモードでは、常にプライマリノードに送信されていました。 ネイティブレプリケーション/スナップショットアイソレーションモードでは、常にすべてのノードに送信されていました。
このリリースでは、PREPAREおよびEXECUTEコマンドによるプリペアドステートメントで読み取りのみの場合に負荷分散できるようになりました。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-May/004334.html
PCPプロセスの正常な起動および停止ログの出力を無効にするlog_pcp_processes設定パラメータを追加しました。(Tatsuo Ishii)
以前はpcpコマンドを実行するたびに、エラーがなくても、fork/exitログが記録されていました。
パラメータが無効になっている場合でも、異常なfork/exitイベントはログに記録されます。
パッチはMaximilien Cuonyによって作成され、Tatsuo Ishiiによってレビューされました。
マルチステートメントを幅広く使用できるようにしました。(Tatsuo Ishii)
このリリースでは、複数のステートメント(マルチステートメント)に関するPgpool-IIの長年の制限を排除しました。 たとえば、以下のようなクエリは以前はエラーになっていました。
BEGIN;SELECT; SAVEPOINT foo;
なお、依然として、マルチステートメントの各クエリは負荷分散されないことに留意してください。
この機能は新機能ですが、バグ修正の意味合いもあるので、4.4~4.1にバックポートしています。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/004287.html
マルチステートメントのクエリを判定するために、psqlscanのソースコードをPgpool-IIにインポートしました。(Tatsuo Ishii)
psqlscanは、PostgreSQLソースツリー内のモジュールです。 これは本質的にPostgreSQLSQLスキャナのサブセットですが、各SQLステートメントの終わりの検出に特化しています。 したがって、これを使用してクエリ文字列内のSQLステートメントの数をカウントできます。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/004291.html
新しい設定パラメータnotice_per_node_statementを追加しました。(Tatsuo Ishii)
この新しいパラメータを有効にすると、バックエンドごとにクエリのNOTICEメッセージを発行できます。 これはlog_per_node_statementに似ていますが、ログレベルがNOTICEであるため、ログはクライアントの端末に出力されるため、ユーザはpgpoolログファイルを調べなくてもクエリの宛先を知ることができます。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-February/004276.html
ステータスファイルの読み込みに関するログを強化しました。(Tatsuo Ishii)
以前はpgpool_statusが存在し、ステータスがダウンの場合にのみ、ログメッセージが出力されていました。 しかし、ステータス(稼働中または未使用)に関係なく、pgpool_statusが存在し、pgpoolの起動時に読み取られたことが有用な情報です。
gitリポジトリからpool_config.cとscan.cを削除しました。(Tatsuo Ishii)
これらは自動的に生成されるファイルなので、gitリポジトリに保存すべきではありません。
autoconfで生成されるMakefile.inなどを削除しました。(Tatsuo Ishii)
また、いくつかの .gitignoreファイルを更新し、いくつかの新しい.gitignoreファイルを追加しました。 生成されたファイルはgitによって提供されなくなったため、開発者はコンパイル前にautoconf/autoreconfを実行する必要があります。
Pgpool-IIメインプロセスとpcp子プロセスの競合状態を修正しました。(Tatsuo Ishii)
pcp子プロセスがフォークされると、pgpoolメインプロセスはすべてのシグナルのブロックを解除します。 これにより、シグナルハンドラーが設定される前にシグナルがpcpプロセスに送信されると、競合状態が発生する可能性がありました。 シグナルハンドラーがセットアップされるまでシグナルのブロックを解除しないように修正しました。
ディスカッション: https://www.pgpool.net/pipermail/pgpool-hackers/2023-September/004398.html
このリリースでは、4.3.xと同じバグ修正がすでに適用されています。これらの修正の詳細については、付録Aを参照してください。
設定例「8.2. Pgpool-II + Watchdog Setup Example」をPgpool-II 4.5とPostgreSQL 16に更新しました。(Bo Peng)
001.load_balanceテストのタイムアウトを修正しました。(Tatsuo Ishii)
001.load_balanceを強化しました。(Tatsuo Ishii)