All Products
Search
Document Center

PolarDB:Global metadata cache (Global Cache)

Last Updated:Jan 14, 2026

Topik ini menyediakan informasi latar belakang mengenai cache metadata global (Global Cache) dan menjelaskan cara menggunakannya.

Applicability

Fitur ini didukung pada PolarDB for PostgreSQL yang menjalankan PostgreSQL 14 dengan versi mesin minor 2.0.14.8.11.0 atau yang lebih baru.

Catatan

Anda dapat melihat nomor versi mesin minor di Konsol atau dengan menjalankan pernyataan SHOW polardb_version;. Jika versi mesin minor tidak memenuhi persyaratan, Anda dapat upgrade the minor engine version.

Informasi Latar Belakang

Untuk meningkatkan efisiensi akses metadata, PostgreSQL menggunakan beberapa cache metadata di setiap proses:

  • RelCache (Relation Descriptor Cache): Menyimpan cache deskriptor relasi.

  • CatCache/SysCache (System Catalog Cache): Menyimpan cache tabel sistem.

RelCache dan CatCache bersifat privat untuk setiap proses. Akibatnya, ketika sebuah database memiliki banyak koneksi atau objek—seperti tabel, tampilan (views), dan indeks—instansiasi basis data mengonsumsi memori dalam jumlah besar.

Global metadata cache (Global Cache) adalah istilah kolektif untuk cache metadata yang berada di memori bersama dan PolarDB for PostgreSQL. Global Cache memungkinkan semua proses berbagi entri cache yang sama, sehingga meningkatkan pemanfaatan memori dan mengurangi risiko error kehabisan memori (out-of-memory/OOM). Saat ini, Global Cache mencakup:

  • Global RelCache: Cache deskriptor relasi global yang berkorespondensi dengan RelCache.

  • Global CatCache: Cache tabel sistem global yang berkorespondensi dengan CatCache/SysCache.

RelCache

RelCache mengatur ulang dan menyimpan seluruh metadata terkait suatu tabel—termasuk views, indeks, dan tabel TOAST—di memori agar aksesnya lebih efisien. Selama semua tahap pemrosesan SQL, seperti saat mengambil informasi kolom tabel, informasi indeks, atau informasi tabel partisi, RelCache diakses secara langsung. Jika terjadi miss pada RelCache, sistem akan melakukan pemindaian pada tabel sistem dan memuat datanya ke memori.

RelCache pada PostgreSQL native tidak memiliki mekanisme eviction. Biasanya, setelah akses pertama, RelCache menyimpan data dalam cache hingga proses berakhir. Atau, jika operasi Data Definition Language (DDL) mengubah metadata tabel, sistem akan menyiarkan pesan invalidasi cache. Setelah menerima pesan tersebut, RelCache akan menghapus objek yang tidak valid dari memori.

CatCache

CatCache menyimpan cache tupel dari tabel sistem. Di atas CatCache dibangun lapisan lain, yaitu SysCache, yang menyediakan antarmuka key-value (KV). Pada dasarnya, CatCache dan SysCache bekerja sama untuk mengatur ulang data dari tabel sistem ke dalam format KV di memori guna menyederhanakan kueri. Misalnya, selama pemrosesan SQL—seperti mengambil nama berdasarkan object identifier (OID)-nya atau mencari jumlah parameter fungsi berdasarkan OID-nya—CatCache diakses secara langsung. Jika terjadi miss pada CatCache, data dimuat dari tabel sistem. Proses pemuatan dan invalidasi untuk CatCache hampir identik dengan RelCache.

Parameter descriptions

Parameter

Tingkat

Deskripsi

polar_enable_global_catcache

PGC_USERSET

Mengaktifkan atau menonaktifkan Global CatCache. Nilai yang valid:

  • on (default): Mengaktifkan fitur Global CatCache.

  • off: Menonaktifkan fitur Global CatCache.

polar_enable_global_relcache

PGC_USERSET

Mengaktifkan atau menonaktifkan Global RelCache. Nilai yang valid:

  • on (default): Mengaktifkan fitur Global RelCache.

  • off: Menonaktifkan fitur Global RelCache.

polar_sgc_max_size

PGC_POSTMASTER

Menetapkan ukuran total Global Cache. Rentang nilai: 0 hingga INT_MAX. Nilai default adalah 72 MB. Diperlukan restart agar perubahan berlaku.

polar_global_catcache_size

PGC_SIGHUP

Menetapkan ukuran Global CatCache. Rentang nilai: 0 hingga nilai polar_sgc_max_size. Nilai default adalah 32 MB.

polar_global_relcache_size

PGC_SIGHUP

Menetapkan ukuran Global RelCache. Rentang nilai: 0 hingga nilai polar_sgc_max_size. Nilai default adalah 32 MB.

Catatan

Kapasitas setiap Global Cache dapat ditingkatkan atau dikurangi secara online, selama tidak melebihi nilai polar_sgc_max_size. Hal ini memberikan fleksibilitas untuk berbagai skenario bisnis. Saat menggunakan fitur ini, perhatikan hal-hal berikut:

  • Pastikan Global Cache memiliki kapasitas yang cukup. Cache ini sering diakses selama semua tahap pemrosesan SQL. Jika kapasitas tidak mencukupi, eviction akan dipicu. Ketika data yang dievict diakses kembali, data tersebut harus dimuat dari file, yang dapat menyebabkan I/O tambahan dan degradasi performa.

  • Jika cache sudah penuh, Anda tetap dapat mengurangi skalanya secara online dengan menyesuaikan parameter. Global Cache yang sesuai akan mengevict sebagian data. Hal ini dapat memengaruhi performa, jadi lakukan operasi ini dengan hati-hati.

  • Memori yang ditentukan oleh polar_sgc_max_size dialokasikan untuk Global RelCache dan Global CatCache. Sebagian memori juga harus disisihkan untuk keperluan manajemen, seperti tabel hash internal, guna memastikan Global Cache beroperasi dengan benar. Oleh karena itu, nilai polar_sgc_max_size harus lebih besar daripada jumlah polar_global_relcache_size dan polar_global_catcache_size.

Monitoring interfaces

Semua antarmuka pemantauan untuk Global Cache tersedia dalam ekstensi polar_global_cache. Jalankan perintah berikut untuk membuat ekstensi tersebut.

CREATE EXTENSION polar_global_cache;

Cache statistics information

Global Cache global statistics information

Anda dapat melihat informasi status Global Cache di tampilan polar_global_cache_stat. Saat ini, tampilan ini hanya mencakup statistik untuk Global RelCache dan Global 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

Deskripsi metrik:

Metrik

Deskripsi

nlookup

Jumlah pencarian cache.

nlookup_miss

Jumlah miss pada pencarian. Anda dapat menggunakan metrik ini bersama nlookup untuk mengevaluasi tingkat hit Global Cache. Tingkat hit mungkin rendah saat sistem pertama kali dijalankan, tetapi akan meningkat secara bertahap seiring cache dipra-ambil. Tetapkan kapasitas yang sesuai untuk memastikan tingkat hit Global Cache tetap tinggi dan menghindari degradasi performa.

ninsert

Jumlah penyisipan cache baru.

nmove, ndelete

Jumlah kali objek cache dipindahkan dan dihapus selama scaling.

ninvalidate

Jumlah invalidasi cache.

nflush

Jumlah kali seluruh cache dibersihkan karena pesan invalidasi cache khusus atau perintah seperti drop database;.

nevict

Jumlah total objek yang dievict dari Global Cache.

Catatan

Objek dalam Global Cache dievict berdasarkan kebijakan Least Recently Used (LRU). Objek-objek tersebut dibagi menjadi daftar aktif dan daftar tidak aktif, dengan objek di daftar tidak aktif dievict terlebih dahulu. Selama eviction, objek yang seharusnya dievict menurut kebijakan LRU mungkin tidak dievict karena sedang digunakan atau karena konflik konkurensi. Kasus-kasus ini dapat diabaikan.

Nilai bukan nol pada metrik terkait nevict menunjukkan bahwa kapasitas saat ini tidak mencukupi. Untuk menghindari masalah performa, tingkatkan kapasitas dengan menyesuaikan parameter polar_global_catcache_size atau polar_global_relcache_size.

nevict_active

Jumlah objek yang dievict dari daftar aktif Global Cache.

nevict_fail

Jumlah kegagalan eviction dari Global Cache.

lru_active_len

Panjang daftar aktif dalam daftar LRU internal.

lru_inactive_len

Panjang daftar tidak aktif dalam daftar LRU internal.

Local Cache global statistics information

Metrik dalam tampilan polar_cache_stat merupakan subset dari metrik dalam tampilan polar_global_cache_stat. Untuk informasi lebih lanjut mengenai metrik tersebut, lihat deskripsi metrik untuk tampilan polar_global_cache_stat.

Catatan

Meskipun polar_cache_stat menampilkan informasi mengenai cache privat untuk setiap proses, hasil kueri dari tampilan ini menggabungkan data dari semua proses.

=> 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

CatCache statistics information

Global CatCache statistics information

Anda dapat melihat informasi status Global CatCache di tampilan polar_global_catcache_stat.

Catatan

Dibandingkan dengan polar_global_cache_stat, tampilan ini mencakup bidang tambahan xxx_clist. Anda biasanya dapat mengabaikan metrik ini. Terdapat dua jenis objek dalam CatCache: CatTuple dan CatList. Metrik xxx_clist mencatat berbagai data mengenai objek 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

Local CatCache statistics information

Anda dapat melihat informasi status CatCache privat untuk suatu proses di tampilan polar_catcache_stat. Metrik statistiknya merupakan subset dari metrik dalam polar_global_catcache_stat, dan maknanya sama.

=> 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

RelCache statistics information

Global RelCache statistics information

Anda dapat melihat status Global RelCache di tampilan 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

Local RelCache statistics information

Anda dapat melihat status RelCache dalam session saat ini di tampilan 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