【问题背景】
在 Oracle 中,常规只需设置 SGA 和 PGA,系统内部自动分配内存即可。但在 YashanDB 中,为了支持更灵活的内存控制,提供了更多内存参数项,便于在不同业务场景下做细致优化。
然而,不少用户在调整过程中遇到报错,典型如:
SQL_POOL_SIZE + DICTIONARY_CACHE_SIZE > 100 报错
这类问题往往源于对 Share Pool 参数关系理解不足。
【适用版本】
YashanDB 23.2 及以上版本
【内存参数体系简述】
YashanDB 将内存划分为多个区域,其中共享内存(Share Pool)由多个子池组成,类似 Oracle 的 SGA 内部结构。
主要子池包括:
SQL_POOL:存放 SQL 解析、执行计划信息;
DICTIONARY_CACHE(DC_POOL):缓存系统字典信息;
CURSOR_POOL:游标缓存;
LOCK_POOL:锁管理相关内存。
这些池子共享 SHARE_POOL_SIZE 所指定的总空间。
【关键参数说明与关系】
注意:SQL_POOL_SIZE + DICTIONARY_CACHE_SIZE ≤ 100.否则配置无效并报错。
【设计思路】
动态调整机制:在内存不足时,SQL_POOL 与 DC_POOL 可动态向 Share Pool 申请资源;
统一入口配置:默认用户仅需配置 SHARE_POOL_SIZE 即可;
高阶用户可细调:通过上述参数手动限制每个池的使用上限,更适用于特定业务场景(如跑批 vs 联机混合场景)。
【常见问题解答】
【总结建议】
日常场景建议使用默认值(SHARE_POOL_SIZE=256MB,SQL=50%,DC=25%);
若执行复杂 SQL、跑批量大,可适当提升 SQL_POOL 占比或总内存;
修改时注意:比例型参数不能相加超过100%,大小型参数单位为 MB;
修改 SHARE_POOL_SIZE 后需重启数据库。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。