本文介绍了PolarDB PostgreSQL版(兼容Oracle)的Global CatCache功能。
背景信息
原生PostgreSQL将Cat/Sys Cache保存在各个进程私有内存中,在连接数较多时,会消耗较多内存,部分极端场景下甚至出现OOM的风险。
PolarDB PostgreSQL版(兼容Oracle)引用了Global CatCache功能,将Cat/Sys Cache保存在所有进程都可以访问的共享内存中,确保Cat/Sys Cache的内存消耗不再受连接数的影响,大大提高了服务稳定性。
参数说明
| 参数 | 级别 | 说明 | 
| polar_enable_global_catcache | PGC_USERSET | 用于开启或关闭Global CatCache。取值如下: 
 | 
| polar_global_catcache_size | PGC_SIGHUP | 用于设置Global CatCache的容量大小。保持默认值即可,单位为MB。 说明  可以根据需求调整Global CatCache容量,一般使用默认值即可。 | 
| polar_catcache_size | USERSET | 用于设置进程内部CatCache容量大小,即每个进程内部的CatCache可以缓存的缓存对象个数。可以针对单个Session设置,也可以全局设置。 | 
监控
所有监控接口都在polar_global_cache插件中,执行以下命令,创建插件。
create extension polar_global_cache;polar_global_catcache_stat视图
您可以通过polar_global_catcache_stat视图查看Global CatCache的状态信息。
table 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指标说明:
| 指标 | 说明 | 
| nlookup | 查询次数。 | 
| nlookup_miss | 查询未命中的次数。结合 | 
| ninsert | 新插入次数。 | 
| ndelete | 删除次数。正常情况下为0,缩容时可能会递增。 | 
| ninvalidate | 失效次数。 | 
| nflush | 由于特殊缓存失效消息或者 | 
| neivct | Global CatCache淘汰的总个数。 说明  Global CatCache中的对象按照LRU进行淘汰,分为active list和nactive list,优先淘汰inactive list中的缓存。而淘汰的过程中,可能因为当前的对象正在使用或者一些并发冲突导致按照LRU策略应该淘汰的对象却无法淘汰,这种情况无需关心。 nevict相关指标不为0说明当前容量不足,为避免影响性能,可以通过 | 
| neivct_active | Global CatCache淘汰处于active list中的个数。 | 
| neivct_fail | Global CatCache淘汰失败的次数。 | 
| rehash_fail | Global CatCache内部的管理hash table可能因为内存不足导致rehash失败的次数。 | 
| meta_alloc_fail | Global CatCache内部相关元数据共享内存分配失败,可以通过调大 | 
| data_alloc_fail | Global CatCache容量不足,可以通过 | 
polar_catcache_stat视图
您可以通过polar_catcache_stat视图查看进程内部的CatCache的状态信息。
指标为polar_global_catcache_stat的子集,指标说明和polar_global_catcache_stat一致。
table 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      | 4