すべてのプロダクト
Search
ドキュメントセンター

PolarDB:グローバルキャッシュ

最終更新日:Jun 27, 2024

このトピックでは、グローバルキャッシュ機能に関する背景情報と、この機能の使用方法について説明します。

使用上の注意

グローバルキャッシュ機能は、次のエンジンを実行する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を有効にするかどうかを指定します。 有効な値:

  • on (デフォルト)

  • off

polar_enable_global_relcache

PGC_USERSET

グローバルRelCacheを有効にするかどうかを指定します。 有効な値:

  • on (デフォルト)

  • off

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

クエリのミス数。 このメトリックをnlookupメトリックと組み合わせて使用して、グローバルキャッシュのヒット率を評価できます。 ヒット率は、システム起動の初期段階では低く、キャッシュプリフェッチに伴って徐々に増加する。 グローバルキャッシュのヒット率とシステムパフォーマンスを確保するために、グローバルキャッシュに適切な容量を指定する必要があります。

ninsert

insert 操作数。

nmoveおよびndelete

スケーリング中の移動操作と削除操作の回数。

ninvalidate

無効化操作の数。

nflush

専用キャッシュ無効化メッセージやDROP DATABASE; ステートメントなどの理由でキャッシュをフラッシュする操作の数。

nevict

立ち退きの数。

説明

グローバルキャッシュ内のオブジェクトは、アクティブリストと非アクティブリストに入れられ、LRU (Least Recently Used) ポリシーに基づいて削除されます。 非アクティブリスト内のオブジェクトは優先的に追い出される。 オブジェクトが使用されているため、または同時実行の競合により、オブジェクトはLRUポリシーで指定されたとおりに追い出されない場合があります。 そのような場合は無視できます。

nevict関連のメトリックの値が0でない場合、現在の容量は不十分です。 パフォーマンスの低下を防ぐために、polar_global_catcache_sizeまたはpolar_global_relcache_sizeパラメーターを変更して容量を増やすことができます。

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