gbase 8a 执行报错内存不足:return NULL in alloc
1. 报错内容如下图所示

2. Gbase 8a 内存分配方式
当数据库启动时,gbase_heap_data,gbase_heap_large ,gbase_heap_temp三个参数控制这对应的堆栈内存,在达到这三个参数控制的的值之前,一经分配则不会释放,且这些值是按照物理内存的10/16=62.5%评估,比例是6:3:1, 等同于 6/16、 3/16 和 1/16。并且这些值不能超过 (物理内存) * gbase_memory_pct_target(默认为0.8)。
3. 运行报错分析
当一条sql在执行时需要申请更多的内存,当申请的值大于 (物理内存) * gbase_memory_pct_target - gbase_heap_data - gbase_heap_temp - gbase_buffer_insert 时,即会以上错误。

4. 运行报错分析,解决方式
① 有限考虑优化sql,避免执行计划产生过多的复制表,使sql使用更少的内存。
② 如无法优化,加大数据库所在服务器内存。
③ 执行对应sql前执行release cache;refresh tables; set gbase_parallel_degree = ' ';释放可释放内存并降低该sql执行的并行度,以降低执行速度的情况下,促使该sql正常执行。
④ 调整gbase_memory_pct_target为0.9,并适当降低gbase_heap_data、gbase_heap_large、gbase_heap_temp的默认值,此类修改可能会导致数据库整体sql执行效率下降,谨慎修改。
⑤ 修改_gbase_memory_use_swap为on,在计算最大值时会变为(物理内存+swap内存) *gbase_memory_pct_target,即数据库在执行sql是会分配swap,大大降低运行效率。
以上方法优先级依次递减。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526