【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述
详细版本: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 导入的情况
文档中配置参数有详细说明
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/43c22d43fd51d25b6ed64da9c】。文章转载请联系作者。
评论