问题描述
详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237
影响范围:
离线数据迁移场景,影响业务数据入库。
外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。
操作系统环境配置:
125G 内存
32C CPU
2T 的 HDD 磁盘
问题出现的步骤/操作:
1、部署崖山分布式数据库 1mm 1cn 3dn
单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式
2、观察 yasldr.log 是否出现如下错误
failed to allocate 6812396 bytes memory quota for init bulkload quota
问题分析
BULKLOAD 导入过程中所有导入线程的最大可用内存按如下公式配置:
COLUMNAR_MATERIAL_PERCENT COLUMNAR_VM_BUFFER_SIZE BULKLOAD_MAX_MEM_PERCENT
相应参数配置:
COLUMNAR_VM_BUFFER_SIZE = 19375M
COLUMNAR_MATERIAL_PERCENT = 80 //没有配置,使用默认配置
BULKLOAD_MAX_MEM_PERCENT = 80 //没有配置,使用默认配置
导入线程的最大可用内存: 80% 19375M 80% = 12400M
yasldr 进程数(8 个)和线程数(32 线程),总线程数量: 8 * 32 = 256
平均每个线程的可用内存: 12400M/256 = 48.4375 M
已知配置参数:COLUMNAR_BULK_SIZE = 4096 //指定列存计算每批次记录行数
每行记录如果有 20K,就超过平均值,资源变成紧张。
规避方法
1、减小导入线程
2、调大相关内存配置(COLUMNAR_MATERIAL_PERCENT/COLUMNAR_VM_BUFFER_SIZE /BULKLOAD_MAX_MEM_PERCENT)
为保证导入不因内存不足报错,请至少保证每个服务端导入线程内存最小为 300M。
可以通过视图 dV$bulkloadStat 观察 bulkload 导入的情况
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。