このトピックでは、グローバルキャッシュ機能に関する背景情報と、この機能の使用方法について説明します。
使用上の注意
グローバルキャッシュ機能は、次のエンジンを実行するPolarDB for PostgreSQLクラスターでサポートされています。
次のステートメントを実行して、PolarDB for PostgreSQLクラスターのリビジョンバージョンを照会できます。
select version();
背景情報
メタデータクエリの効率を向上させるために、PostgreSQLでは各プロセスに次のメタデータキャッシュが導入されています。
RelCache: リレーション記述子をキャッシュします。
CatCacheおよびSysCache: キャッシュシステムのカタログ。
各プロセスには、独自のRelCacheとCatCacheがあります。 多数の接続が確立されている場合、またはデータベースにテーブル、ビュー、インデックスなどの多数のオブジェクトが含まれている場合、キャッシュのメモリ消費は高くなります。
グローバルキャッシュ機能は、 PolarDB for PostgreSQLでサポートされています。 グローバルキャッシュは、すべてのプロセスがアクセスできる共有メモリに格納されたメタデータキャッシュです。 これは、すべてのプロセスがキャッシュエントリを共有できるようにすることでメモリ使用量を最大化するのに役立ち、メモリ不足 (OOM) の問題の可能性を減らします。 次のグローバルキャッシュがサポートされています。
Global RelCache: グローバルアクセスのリレーション記述子をキャッシュします。
Global CatCache: グローバルアクセス用のシステムカタログをキャッシュします。
再キャッシュ
RelCacheは、より効率的なアクセスのために、ビュー、インデックス、およびオーバーサイズ属性格納手法 (TOAST) テーブルなど、テーブルのすべてのメタデータを再編成してメモリにキャッシュします。 RelCacheは、テーブルメタデータが必要な場合は常に、SQLステートメントを処理する任意のステップでアクセスされます。 たとえば、システムは、テーブルの列、インデックス、またはパーティションに関する情報を取得するために、テーブルメタデータを照会する必要があります。 要求されたデータがRelCache内に見つからない場合、システムはデータを求めてシステムテーブルをスキャンし、そのデータをRelCache内にキャッシュする。
ネイティブPostgreSQLのRelCacheには、削除メカニズムがありません。 ほとんどの場合、RelCacheが初めてアクセスされると、関連するプロセスが終了するまでデータをキャッシュし続けます。 RelCacheは、DDL操作によってブロードキャストされるキャッシュ無効化メッセージを受信した後にのみ、メモリから無効なオブジェクトを削除します。
CatCache
CatCacheは、システムテーブル内のタプルをキャッシュする。 CatCacheの上に、キー値 (KV) インターフェイスを提供するためにSysCacheが使用されます。 本質的に、CatCacheとSysCacheは、システムテーブル内のデータをKVペアに再編成し、より効率的なアクセスのためにそれらをメモリにキャッシュします。 たとえば、システムがSQLステートメントを処理しているときに、オブジェクト名またはオブジェクト識別子 (OID) によって関数内のパラメータの数を照会する必要がある場合、システムはデータのCatCacheをチェックします。 要求されたデータがCatCacheに見つからない場合、システムはデータを求めてシステムテーブルをスキャンし、データをCatCacheにキャッシュします。 CatCacheでのデータのキャッシュと削除のルールは、RelCacheのルールと基本的に同じです。
Parameters
パラメーター | レベル | 説明 |
polar_enable_global_catcache | PGC_USERSET | グローバルCatCacheを有効にするかどうかを指定します。 有効な値:
|
polar_enable_global_relcache | PGC_USERSET | グローバルRelCacheを有効にするかどうかを指定します。 有効な値:
|
polar_sgc_max_size | PGC_POSTMASTER | グローバルキャッシュの合計サイズ。 有効値: 0〜INT_MAX。 デフォルト値: 72。 単位:MB。 パラメーター値を変更した後、変更を有効にするには、クラスターを再起動する必要があります。 |
polar_global_catcache_size | PGC_SIGHUP | グローバルCatCacheのサイズ。 有効な値: 0〜polar_sgc_max_sizeパラメータの値。 デフォルト値: 32。 単位:MB。 |
polar_global_relcache_size | PGC_SIGHUP | グローバルRelCacheのサイズ。 有効な値: 0〜polar_sgc_max_sizeパラメータの値。 デフォルト値: 32。 単位:MB。 |
グローバルキャッシュの合計サイズがpolar_sgc_max_size
パラメーターの値を超えない限り、オンラインで各グローバルキャッシュの容量を増減できます。 これにより、さまざまなビジネスシナリオに柔軟性があります。 キャッシュサイズを指定するときは, 次の项目に注意してください。
グローバルキャッシュの容量が十分であることを確認してください。 SQLステートメントの処理中、グローバルキャッシュは頻繁にアクセスされます。 グローバルキャッシュの容量が使い果たされると、削除がトリガーされます。 次に、追い出されたデータが要求された場合、データをファイルから再度キャッシュする必要があります。 これは追加のI/Oにつながり、パフォーマンスに影響を与える可能性があります。
グローバルキャッシュの容量が使い果たされた場合でも、上記のパラメーターを変更することで、オンラインで容量を減らすことができます。 したがって、グローバルキャッシュは、パフォーマンスに影響を与えるデータの一部を追い出します。 この操作は慎重に行ってください。
polar_sgc_max_size
パラメーターで指定されたグローバルキャッシュに割り当てられたメモリの一部は、グローバルキャッシュの通常の動作を維持するためのメモリ管理用に予約されています。 例えば、ハッシュテーブルは、予約されたメモリに格納される。 したがって、polar_sgc_max_size
パラメーターの値は、通常、polar_global_relcache_size
パラメーターとpolar_global_catcache_size
パラメーターの値の合計よりも大きくなります。
モニタリング
polar_global_cache
拡張機能を使用すると、グローバルキャッシュを監視できます。 次のステートメントを実行して、拡張子を作成します。
CREATE EXTENSION polar_global_cache;
キャッシュの統計
グローバルキャッシュの統計
グローバルキャッシュに関する情報は、polar_global_cache_stat
ビューで表示できます。 グローバルRelCacheとグローバルCatCacheに関する情報が表示されます。
=> SELECT * FROM polar_global_cache_stat;
-[ RECORD 1 ]----+----------------
cache_name | Global CatCache
elems | 2805
nlookup | 74233
nlookup_miss | 43576
ninsert | 9478
nmove | 0
ndelete | 0
ninvalidate | 35843
nflush | 1
nevict | 0
nevict_active | 0
nevict_fail | 0
lru_active_len | 402
lru_inactive_len | 2403
data_allocator | 2
meta_allocator | 1
component_id | 1
-[ RECORD 2 ]----+----------------
cache_name | Global RelCache
elems | 95
nlookup | 1203
nlookup_miss | 1005
ninsert | 265
nmove | 0
ndelete | 0
ninvalidate | 4404
nflush | 1
nevict | 0
nevict_active | 0
nevict_fail | 0
lru_active_len | 3
lru_inactive_len | 92
data_allocator | 3
meta_allocator | 1
component_id | 2
メトリクス
メトリック | 説明 |
nlookup | クエリの数。 |
nlookup_miss | クエリのミス数。 このメトリックを |
ninsert | insert 操作数。 |
nmoveおよびndelete | スケーリング中の移動操作と削除操作の回数。 |
ninvalidate | 無効化操作の数。 |
nflush | 専用キャッシュ無効化メッセージや |
nevict | 立ち退きの数。 説明 グローバルキャッシュ内のオブジェクトは、アクティブリストと非アクティブリストに入れられ、LRU (Least Recently Used) ポリシーに基づいて削除されます。 非アクティブリスト内のオブジェクトは優先的に追い出される。 オブジェクトが使用されているため、または同時実行の競合により、オブジェクトはLRUポリシーで指定されたとおりに追い出されない場合があります。 そのような場合は無視できます。 nevict関連のメトリックの値が0でない場合、現在の容量は不十分です。 パフォーマンスの低下を防ぐために、 |
nevict_active | アクティブリスト内の立ち退きの数。 |
nevict_fail | 失敗した退去の数。 |
lru_active_len | 内部LRUリスト内のアクティブリストの長さ。 |
lru_inactive_len | 内部LRUリスト内の非アクティブリストの長さ。 |
ローカルキャッシュの統計
polar_cache_stat
ビューのメトリックは、polar_global_cache_stat
ビューのメトリックのサブセットです。 メトリクスの詳細については、前述のpolar_global_cache_stat
ビューのmetricsテーブルをご参照ください。
polar_cache_stat
ビューは、すべてのプロセスのローカルキャッシュのデータを集約します。
=> SELECT * FROM polar_cache_stat;
-[ RECORD 1 ]-+--------------
cache_name | Proc CatCache
nlookup | 779844
nlookup_miss | 82390
ninsert | 150876
ndelete | 139690
ninvalidate | 74231
nevict | 126474
nevict_active | 1808
evict_fail | 0
-[ RECORD 2 ]-+--------------
cache_name | Proc RelCache
nlookup | 295183
nlookup_miss | 4632
ninsert | 25968
ndelete | 3277
ninvalidate | 8856
nevict | 0
nevict_active | 0
evict_fail | 0
CatCachesに関する統計
グローバルCatCacheの統計
polar_global_catcache_statビューで、グローバルCatCacheに関する情報を表示できます。
polar_global_cache_stat
ビューと比較して、このビューにはxxx_clist
メトリックが追加されており、ほとんどの場合無視できます。 CatCacheには、CatTupleとCatListの2種類のオブジェクトが格納されます。 xxx_clist
メトリックは、CatListタイプのオブジェクトに関するさまざまなデータを記録します。
=> SELECT * FROM polar_global_catcache_stat;
-[ RECORD 1 ]-------+----
elems | 34
nlookup | 853
nlookup_miss | 852
ninsert | 34
nmove | 0
ndelete | 0
ninvalidate | 0
nflush | 0
nevict | 0
nevict_active | 0
nevict_fail | 0
nlookup_clist | 41
nlookup_miss_clist | 41
ninsert_clist | 0
nmove_clist | 0
ndelete_clist | 0
ninvalidate_clist | 0
nevict_clist | 0
neivct_active_clist | 0
rehash_fail | 0
meta_alloc_fail | 0
data_alloc_fail | 0
lru_active_len | 0
lru_inactive_len | 34
component_id | 1
ローカルCatCachesに関する統計
プロセス固有のCatCachesに関する情報は、polar_catcache_stat
ビューで表示できます。 このビューのメトリックは、polar_global_catcache_stat
ビューのメトリックのサブセットです。
=> SELECT * FROM polar_catcache_stat;
-[ RECORD 1 ]------+-----
nlookup | 2060
nlookup_miss | 898
ninsert | 883
ndelete | 753
ninvalidate | 0
nevict | 753
nevict_active | 2
evict_fail | 0
nlookup_clist | 41
nlookup_miss_clist | 41
ninsert_clist | 41
ndelete_clist | 41
RelCachesに関する統計
グローバルRelCacheの統計
グローバルRelCacheに関する情報は、polar_global_relcache_stat
ビューで確認できます。
=> SELECT * FROM polar_global_relcache_stat;
-[ RECORD 1 ]----+-----
elems | 61
nlookup | 930
nlookup_miss | 836
ninsert | 221
nmove | 0
ndelete | 0
ninvalidate | 4344
nflush | 1
nevict | 0
nevict_active | 0
nevict_fail | 0
meta_alloc_fail | 0
data_alloc_fail | 0
lru_active_len | 3
lru_inactive_len | 58
component_id | 2
ローカルRelCachesに関する統計
プロセス固有のRelCachesに関する情報は、polar_relcache_stat
ビューで表示できます。
=> SELECT * FROM polar_relcache_stat;
-[ RECORD 1 ]-+-------
nlookup | 293458
nlookup_miss | 4535
ninsert | 20239
ndelete | 3277
ninvalidate | 8856
nevict | 0
nevict_active | 0
evict_fail | 0