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.
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:
|
polar_enable_global_relcache | PGC_USERSET | Mengaktifkan atau menonaktifkan Global RelCache. Nilai yang valid:
|
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. |
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_sizedialokasikan 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, nilaipolar_sgc_max_sizeharus lebih besar daripada jumlahpolar_global_relcache_sizedanpolar_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 | 2Deskripsi metrik:
Metrik | Deskripsi |
nlookup | Jumlah pencarian cache. |
nlookup_miss | Jumlah miss pada pencarian. Anda dapat menggunakan metrik ini bersama |
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 |
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 |
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.
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 | 0CatCache statistics information
Global CatCache statistics information
Anda dapat melihat informasi status Global CatCache di tampilan polar_global_catcache_stat.
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 | 1Local 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 | 41RelCache 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 | 2Local 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