问题现象
现场加载频繁,每次加载的数据量很小(几 MB 到几十 MB,1000 行级别),而且
大多是宽表(800~1000 列)。由于 GBase 8a MPP Cluster 是列存数据库,在这种情
况下每次加载任务需要打开大量文件(与列数成正比)进行读写,并且每次写入的
数据量又很少。导致每次加载任务的 IO 代价较高(在整个加载时间的占比较高),
加载最后阶段需要把数据和元数据 sync 到磁盘,数据提交阶段占用时间较长,总体
加载效率偏低。目前的存储结构和整体架构确定了 GBase 8a MPP Cluster 擅长于进
行大批量数据加载,不擅长处理宽表小文件频繁加载的场景。
解决方法
放大批量
在业务允许的时间窗口内,尽量放大单次加载的批量,降低提交的频率。可以
有效提高总体加载的效率。
关于并发加载的参数配置
现场配置了 gbase_pararrel_max_thread_in_pool=64,10 个并发加载任务,这样
的配置不合理,3 个任务就可以用光线程池资源,后续任务只能串行,从而影
响效率。在有并发任务的情况下,一定要根据现场硬件情况配置线程池和并
行度,如在 10 并发情况下可以尝试如下配置:
gbase_pararrel_max_thread_in_pool=128
gbase_loader_parallel_degree=12
(如果还有其他背景任务,还要适当调低 parallel_degree)。