日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

全局元數據緩存

本文介紹了全局元數據緩存(Global Cache)的背景以及如何使用。

前提條件

支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:

Oracle 2.0(內核小版本2.0.14.11.0及以上)

說明

您可通過如下語句查看PolarDB PostgreSQL版(兼容Oracle)的內核小版本的版本號:

SHOW polar_version; 

背景信息

為提升對元數據的訪問效率,PostgreSQL在各個進程中引入了多種元數據緩存:

  • RelCache(Relation Descriptor Cache):關系描述符緩存。

  • CatCache/SysCache(System Catalog Cache):系統表緩存。

RelCache, CatCache為各個進程私有,在連接數較多或者數據庫中對象個數較多時(表、視圖、索引等),數據庫實例會因此消耗大量的內存。

全局元信息緩存(Global Cache)是PolarDB PostgreSQL版(兼容Oracle)系列位于共享內存中供所有進程共享的元數據緩存的統稱。Global Cache可以讓所有進程共享同一個緩存條目,提高內存利用效率,降低因此發生OOM的風險。Global Cache 目前包括:

  • Global RelCache:全局關系描述符緩存,對應RelCache。

  • Global CatCache:全局系統表緩存,對應CatCache/SysCache。

RelCache

RelCache是把和一張表(包括視圖、索引、Toast等)相關的所有元數據按照訪問更高效的方式,重新組織緩存在內存中,在處理SQL的各個階段(例如,想知道一張表的列信息、索引信息、分區表信息等),都會直接訪問RelCache。如果RelCache未命中,才會掃描系統表并加載到內存中。

原生PostgreSQL的RelCache并無淘汰機制,所以正常情況下第一次訪問之后,RelCache會持續緩存直到進程退出,或者有DDL修改了表的元數據并廣播了Cache失效消息,RelCache在收到失效消息后會把待失效對象從內存中剔除。

CatCache

CatCache緩存的是系統表中的Tuple,基于CatCache基礎之上還有一層SysCache(KV接口),本質上可以認為CatCache和SysCache一起把系統表中的數據在內存中按照KV方式重新組織,以方便查詢。例如,在處理SQL的過程中(例如,通過oid查詢name,通過oid查詢某函數有多少個參數等),都是直接訪問 CatCache。如果CatCache未命中,再從系統表中加載。CatCache的加載、失效都和RelCache基本一致。

參數說明

參數

級別

說明

polar_enable_global_catcache

PGC_USERSET

用于開啟或關閉Global CatCache。取值如下:

  • on(默認):開啟Global CatCache功能。

  • off:關閉Global CatCache功能。

polar_enable_global_relcache

PGC_USERSET

用于開啟或關閉Global RelCache。取值如下:

  • on(默認):開啟Global RelCache功能。

  • off:關閉Global RelCache功能

polar_sgc_max_size

PGC_POSTMASTER

用于設置Global Cache的總容量大小。取值范圍:0 ~ INT_MAX,默認值為72 MB。修改需要重啟才可以生效。

polar_global_catcache_size

PGC_SIGHUP

用于設置Global CatCache的容量大小。取值范圍:0 ~ polar_sgc_max_size,默認值為32 MB。

polar_global_relcache_size

PGC_SIGHUP

用于設置Global RelCache的容量大小。取值范圍:0 ~ polar_sgc_max_size,默認值為32 MB。

說明

各個Global Cache的容量都支持在線擴縮容,只要不超過polar_sgc_max_size即可,這為不同的業務場景提供了足夠的使用彈性。在使用的時候,需注意以下幾點:

  • 盡量保證Global Cache的容量充足,在SQL處理的各個環節Cache訪問頻率非常高,如果容量不足會觸發淘汰,再次訪問時只能從文件加載,可能導致額外的IO以及性能損耗。

  • 如果某個Cache當前的容量都已用滿,依然可以通過調整上述參數在線縮容,對應的Global Cache會淘汰一部分數據,如上所述,這會影響性能,請謹慎操作。

  • polar_sgc_max_size中的內存除了給Global RelCache和Global CatCache使用,還需要留出一部分用作管理內存(維護Global Cache的正常運轉,例如,內部hashtable等),所以正常情況下polar_sgc_max_size>polar_global_relcache_size+polar_global_catcache_size

監控接口

Global Cache的所有監控接口都在polar_global_cache插件中,執行以下命令,創建插件。

CREATE EXTENSION polar_global_cache;

Cache統計信息

Global Cache全局統計信息

您可以通過polar_global_cache_stat查看Global Cache的狀態信息。目前只包括Global RelCache和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

指標說明:

指標

說明

nlookup

緩存查詢次數。

nlookup_miss

查詢未命中的次數。結合nlookup可以評估Global Cache的命中率,系統啟動前期命中率可能會比較低,隨著緩存的預熱,命中率會慢慢提高。此外需要設置合適的容量來保證Global Cache的命中率,以免影響性能。

ninsert

緩存新插入次數。

nmove、ndelete

擴縮容期間緩存對象被移動和刪除的次數。

ninvalidate

緩存失效次數。

nflush

由于特殊緩存失效消息或者drop database;等導致沖刷整個緩存的次數。

nevict

Global Cache淘汰的總個數。

說明

Global Cache中的對象按照LRU進行淘汰,分為active list和nactive list,優先淘汰inactive list中的緩存。而淘汰的過程中,可能因為當前的對象正在使用或者一些并發沖突導致按照LRU策略應該淘汰的對象卻無法淘汰,這種情況無需關心。

nevict相關指標不為0說明當前容量不足,為避免影響性能,可以通過polar_global_catcache_sizepolal_global_relcache_size參數調大容量。

nevict_active

Global Cache淘汰處于active list中的個數。

nevict_fail

Global Cache淘汰失敗的次數。

lru_active_len

記錄了內部LRU List中active list的長度。

lru_inactive_len

記錄了內部LRU List中inactive list的長度。

Local Cache全局統計信息

polar_cache_stat中的指標為polar_global_cache_stat的子集,指標說明與polar_global_cache_stat一致。

說明

polar_cache_stat雖然展示的是進程私有的Cache信息,但是通過該視圖查詢的結果是匯聚了所有進程的數據。

=> 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統計信息

Global CatCache統計信息

您可以通過polar_global_catcache_stat查看Global CatCache的狀態信息。

說明

相對于polar_global_cache_stat增加了一些xxx_clist字段,這部分指標正常情況下無需關心。CatCache中的對象有兩種,CatTuple和CatList,xxx_clist相關指標記錄了Cat List相關對象的各種數據。

=> 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統計信息

您可以通過polar_catcache_stat查看進程內部的CatCache的狀態信息,統計指標為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

RelCache統計信息

Global RelCache統計信息

您可以通過polar_global_relcache_stat查看Global RelCache的相關狀態。

=> 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統計信息

您可以通過polar_relcache_stat查看當前Session內部relcache的狀態。

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