問題現象
Oracle 一般只需要配置 SGA/PGA,SGA 內存會自動做分配,在崖山有比較多的內存配置參數,可以根據需要做詳細的配置控制。具有有哪些主要參數,功能是什麼呢,用户常有這種疑問。
在用户使用 YashanDB 的時候,開始的時候就會對內存的參數做一些配置調優,在另一篇文章《要有好的跑批性能,有哪些參數要注意》也介紹到如何合理配置各項參數,其中也涉及較多內存參數的配置。
但是用户實際使用的過程,陸續反饋了一些參數配置之後報錯,例如 SQL_POOL_SIZE+DICTIONARY_CACHE_SIZE 配置大於 100 報錯
問題的風險及影響
影響跑批性能
問題影響的版本
YashanDB 版本:23.2 及以上所有版本
解決方法及規避方式
崖山各項內存空間參數
可以參考下圖:
上圖中除了共享區域,其他各個配置均有對應的參數、觀察使用情況的方法,可以在官網中找到詳細的説明 配置參數 | YashanDB Doc,有了觀察實際使用情況的方法後,可以根據實際情況做調整。
而共享區域的配置則相對複雜一點,可以參考下一章節。
Share Pool 內部構成及相互關係
在 Oracle 中,SGA 是全局共享內存區域,其內部也有很詳細的各種池子,各個池子之間可以自動調節。
YashanDB 的實現也有些類似,在 Share Pool 內存在多個 POOL,如 SQL POOL,DC POOL,LOCK_POOL,CURSOR_POOL 等,
為了方面用户使用,設計 SHARE POOL 統一參數,用户一般只需配置 SHARE_POOL_SIZE 參數即可,SHARE POOL 內存可在 SQL POOL、DC POOL 之間動態調整:SQL_POOL、DC_POOL、SHARE_POOL 以 MemoryPool 管理,以 MemoryPool 管理的 POOL 出現內存不足時,可以從 SHARE MEMORY POOL 申請內存。
為了方便高階用户進一步調整,每個 POOL 存在對應的配置參數限制控制其大小,存在如下限制:
● SQL_POOL_SIZE、DICTIONARY_CACHE_SIZE 表示佔用 share pool 大小的百分比,兩者總和不能超過 100
● LOCK_POOL_SIZE 和 CURSOR_POOL_SIZE 表示佔用內存大小
● SQL_POOL_SIZE、DICTIONARY_CACHE_SIZE 參數範圍為[1, 99]的整數,默認值分別為 50,25.
● SHARE_POOL_SIZE 參數範圍為[160MB, 64TB],默認值為 256M, 生效方式為重啓生效
● CURSOR_POOL_SIZE 默認值為 32M