【问题背景】

在 Oracle 中,常规只需设置 SGA 和 PGA,系统内部自动分配内存即可。但在 YashanDB 中,为了支持更灵活的内存控制,提供了更多内存参数项,便于在不同业务场景下做细致优化。

然而,不少用户在调整过程中遇到报错,典型如:

SQL_POOL_SIZE + DICTIONARY_CACHE_SIZE > 100 报错

这类问题往往源于对 Share Pool 参数关系理解不足。

【适用版本】

YashanDB 23.2 及以上版本
image.png

【内存参数体系简述】

YashanDB 将内存划分为多个区域,其中共享内存(Share Pool)由多个子池组成,类似 Oracle 的 SGA 内部结构。

主要子池包括:

SQL_POOL:存放 SQL 解析、执行计划信息;

DICTIONARY_CACHE(DC_POOL):缓存系统字典信息;

CURSOR_POOL:游标缓存;

LOCK_POOL:锁管理相关内存。

这些池子共享 SHARE_POOL_SIZE 所指定的总空间。
image.png

【关键参数说明与关系】
image.png

注意:SQL_POOL_SIZE + DICTIONARY_CACHE_SIZE ≤ 100.否则配置无效并报错。

【设计思路】

动态调整机制:在内存不足时,SQL_POOL 与 DC_POOL 可动态向 Share Pool 申请资源;

统一入口配置:默认用户仅需配置 SHARE_POOL_SIZE 即可;

高阶用户可细调:通过上述参数手动限制每个池的使用上限,更适用于特定业务场景(如跑批 vs 联机混合场景)。

【常见问题解答】
image.png

【总结建议】

日常场景建议使用默认值(SHARE_POOL_SIZE=256MB,SQL=50%,DC=25%);

若执行复杂 SQL、跑批量大,可适当提升 SQL_POOL 占比或总内存;

修改时注意:比例型参数不能相加超过100%,大小型参数单位为 MB;

修改 SHARE_POOL_SIZE 后需重启数据库。


数据库砖家
1 声望0 粉丝