GBase南大通用的gbase数据库高并发入库时未充分利用IO性能?一招方法解决

发布时间:2023年12月25日

GBase南大通用大规模分布式并行数据库集群系统GBase 8a MPP Cluster,是近年来国内比较出色的数仓数据库,越来越多的企事业单位的数据仓库系统、BI系统和决策支持系统都看到它的身影。我们在日常进行大数据分析过程中,我们经常遇到需要从各个平台产生的数据需要迁移至GBase南大通用的gbase8a数仓,才能完成相关的数据经营分析。但是当数据较多,时间又特别紧迫时,必然有高并发入库的情况产生。

gbase 8a集群作为大规模并行分析型数据库,节点都会比较多。根据入库原理,节点数与客户端为N对1的关系,正常理解瓶颈应该在客户端的文件服务器的IO上。但有时候我们发现并发高了之后,明明看到客户端的主机性能较好,或者添加文件服务器数量,得到的入库效果,速度并没有效果叠加,通过iostat查看各个文件服务器的IO,gbase节点的IO也没到瓶颈。通过监控information_schema.load_status发现,AVG_SPEED字段的速度并不高,这很奇怪。
仔细理解gbase入库原理发现,瓶颈其实不单单在硬件,数据入库还有需要对数据分析和任务分发等管理成本,需要几台节点进行完成。以我手上测试的86版本来说,gbase会安排从前面的节点顺延N台主机进行分发,这个N可以通过show variables查看gcluster_loader_max_data_processors得到,默认是8台。倘若我集群节点比较多时,N后面的主机是没参与分发的,难免感觉有点浪费。入库并发较高时,如果只有前面的节点参与分发,压力较大时分到单个任务的线程变少,就算硬件性能保证的情况,入库也未必效果很好。

问题原因已经清楚了,那么我们有没有办法让数据入库任务分发都发到每个节点参与呢?答案是肯定有的。高性能入库作为GBase南大通用的gbase数据库的核心技术之一,作为管理超大规模数据量而设计的通用计算平台,它提供了一个参数控制任务均衡,参数名叫gcluster_load_rebalance_seed。该参数值表示备选加载机节点间任务数偏差值,为大于0的整数,默认值:5。修改方式:可使用 set 语句修改值。适用于 session、global 范围均可。
举例说明,默认情况下,一个管理节点入库任务少于5个时,分发任务都是前面N台节点分发。只有超出了5个任务,才会在N+N的节点做分发管理。特别注意的是,该参数是管理节点独立的,就是说倘若集群有7个管理节点,导入任务有负债均衡连接,极端情况下每个管理节点都有5个入库任务,这时候,前N个节点分发任务数量就会有5*7=35个任务,入库性能肯定上不去。所以我们可以采用以下策略进行优化:
?? ?1)gcluster_load_rebalance_seed参数成1
?? ?2)入库任务只连接一个关联节点
?? ?这样得到的效果就是,第一个入库选择前面N台节点分发未完成时,第二个入库任务就从N+N进行处理,第三个未N+N+N。。。以此类推。
?? ?以上优化方法经我多次测试有效,调整后基本没有类似情况出现。再次说明下,入库是所有节点进行,本文所说的N个节点是指参与文件分发的节点。

文章来源:https://blog.csdn.net/xuansiyu/article/details/135203779
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。