このトピックでは、PolarDB for PostgreSQL のグローバルプランキャッシュ (GPC) 機能について説明します。
背景情報
PolarDB の以前のバージョンでは、プランキャッシュはプリペアドステートメントにバインドされていました。このアプローチには 2 つの欠点がありました:
プランキャッシュは個々の接続に分離されており、共有できませんでした。
各接続が独自のプランキャッシュを保持していたため、メモリ使用量が高くなっていました。
PolarDB for PostgreSQL は、異なる接続で同じプランキャッシュを共有できるようにすることで、これらの問題に対処する GPC 機能を導入しています。
プランは、異なるプリペアドステートメントや接続間で共有できます。多数の異なる SQL 文を持つアプリケーションの場合、GPC はメモリ使用量を大幅に削減し、メモリ不足 (OOM) エラーのリスクを低減できます。この効率的なキャッシュ機構は、実行計画の生成コストも削減し、パフォーマンスを向上させます。
プランは、クエリキーが同じ場合にのみ共有できます。クエリキーは、次の部分で構成されます:
クエリテキスト。
データベース ID。
オブジェクト検索パス。
ユーザー ID。
適用範囲
この機能は、PolarDB for PostgreSQL の以下のバージョンで利用できます:
PostgreSQL 18 (マイナーエンジンバージョン 2.0.18.0.1.0 以降)
PostgreSQL 17 (マイナーエンジンバージョン 2.0.17.2.1.0 以降)
PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.3.1.1 以降)
PostgreSQL 15 (マイナーエンジンバージョン 2.0.15.7.1.1 以降)
PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.9.15.0 以降)
PostgreSQL 11 (マイナーエンジンバージョン 2.0.11.9.28.0 以降)
説明コンソールでマイナーエンジンバージョン番号を確認するか、
SHOW polardb_version;文を実行します。ご利用のクラスターがマイナーエンジンバージョンの要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードしてください。GPC 機能は、バージョンの要件を満たすクラスターではデフォルトで有効になっています。
制限事項
GPC はプリペアドステートメントのみをサポートします。PL/SQL シナリオでは、プランキャッシュはサポートされていません。
SELECT、INSERT、UPDATE、DELETE文のみがサポートされています。一時テーブルはサポートされていません。
パラメーター
パラメーター | 説明 |
polar_gpc_mem | GPC のメモリサイズを設定します。単位:MB。デフォルト値は 30 MB です。この値は 説明
|
polar_enable_gpc_level | GPC 機能が有効になるレベルです。このパラメーターは動的に変更できます。有効な値:
説明
|
polar_gpc_clean_timeout | 使用頻度の低い GPC エントリをクリアする時間間隔。このパラメーターは動的に変更できます。単位:秒。デフォルト値は 1800 秒です。値の範囲は 0 秒から 24 時間です。 |
polar_worker.gpc_clear_interval | 無効な GPC エントリをクリアする時間間隔。このパラメーターは動的に変更できます。単位:秒。デフォルト値は 60 秒です。最大値は (2^32 - 1)/1000 です。 |
polar_gpc_clean_max | 一度にクリアする GPC エントリの数です。このパラメーターは動的に変更できます。デフォルト値は 100 です。値の範囲は 10 から 10000 です。 |
polar_gpc_partitions | GPC エントリを格納するために使用されるハッシュテーブルの数です。デフォルト値は 32 です。値の範囲は 1 から 1024 です。 説明 パラメーターの変更を有効にするには、クラスターを再起動する必要があります。 |
polar_gpc_entries | 各ハッシュテーブルの最大エントリ数です。デフォルト値は 1024 です。値の範囲は 1 から 10000 です。 説明 パラメーターの変更を有効にするには、クラスターを再起動する必要があります。 |
使用ガイド
GPC 機能のモニタリングビューと関数は、polar_gpc 拡張機能に含まれています。次のコマンドを実行して、この拡張機能を作成できます。
CREATE EXTENSION IF NOT EXISTS polar_gpc;