stream load 导入大量数据一段时间后 导入越来越慢

【详述】
自研 mysql-StarRocks 全量导入数据组件,导入的方式是 使用 http stream load 直接连接 3个be节点轮询并发导入。

迁移的表:10个 。并发方式:表级别并发导入【一个表切分多份,并发导入】
stream load 一开始磁盘读不是很大,但是 导入大量数据一段时间后,比如5个并发 40分钟后,频繁报publish timeout. The data will be visible after a whileerrors(此报错已经导入成功,我也了解的) 后, 导入速度越来越慢,此时磁盘出现大量持续性的磁盘读,磁盘负载达到360MB+每秒。

就算把导入程序停了2个小时后,启动程序 现象还是同上。导入程序停止期间 磁盘读大幅度下降。

导入变慢时,正在导入的表信息:【都在对一个表并发导入】
mysql 表:60+亿行
SR表:3个分区72个分桶
【问题】:
1、磁盘出现大量读?在处理什么? 合并读?
2、有效果非常明显的参数优化没?
【同样的问题】:
使用阿里开源的datax单线程导入,一段时间后如20个小时,磁盘读负载也是非常高,达到350MB/s
【业务影响】
【是否存算分离】否
【StarRocks版本】3.1.2-4f3a2ee 、2.5.12
【集群规模】例如:3fe(1 LEADER+2FOLLOWER)+3be(fe与be独立部署)
【机器信息】CPU虚拟核/内存/网卡,例如:16C/64G/万兆
【表模型】例如:主键模型
【导入或者导出方式】自研 mysql-StarRocks 全量导入数据到系统,导入的方式是 使用 http stream load 并发导入
【联系方式】StarRocks社区群17-刘东发
【附件】
iostat -xm 3 100 截图


iotop -oP 截图:

麻烦把datax的配置发一下吧

datax starrockswriter是用哪个版本?

  1. top -Hp be进程
  2. 在BE日志里看下stream load的profile,看下是哪个阶段耗时

都是简单默认配置的

  1. top -Hp be进程 截图

    2.iotop 截图
  2. "在BE日志里看下stream load的profile,看下是哪个阶段耗时 " be 日志中搜索profile关键字 没找到

lsof -p $be_pid|grep '/data1’|grep ‘w’|sort -k7 -rn|head
lsof -p $be_pid|grep '/data1’|grep ‘u’|sort -k7 -rn|head
看下是哪个表的IO比较大,是索引还是数据

这个图显示读写厉害就是主键索引,表结构方便发一下吗

CREATE TABLE xxxxx (
id bigint(20) NOT NULL
xxx_id bigint(20) NOT NULL DEFAULT “0” ,
xxx_id int(11) NOT NULL DEFAULT “0” ,
xxx_time datetime NOT NULL DEFAULT “1970-01-01 00:00:00” ,
xxx_time datetime NULL ,
xxx_time datetime NULL ,
is_xxx tinyint(4) NOT NULL DEFAULT “0"”
) ENGINE=OLAP
PRIMARY KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 114
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“enable_persistent_index” = “true”,
“replicated_storage” = “true”,
“compression” = “LZ4”
);


show tablet xxx;看下这些tablet是不是同一个表,这个表结构有什么特别吧

都是同一张表的。表结构没啥特别的

没有bitmap索引,bloom索引吧?

CREATE TABLE XXX (
id largeint(40) NOT NULL ,
XXX largeint(40) NOT NULL DEFAULT “0” ,
XXX varchar(65533) NOT NULL ,
XXX varchar(65533) NOT NULL,
XXX varchar(65533) NOT NULL ,
XXX varchar(65533) NOT NULL ,
XXX datetime NULL,
XXX datetime NULL ,
XXX smallint(6) NOT NULL DEFAULT “0”,
XXX varchar(65533) NOT NULL
) ENGINE=OLAP
PRIMARY KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 192
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“enable_persistent_index” = “true”,
“replicated_storage” = “true”,
“compression” = “LZ4”
);

strem load 导入主键表 磁盘读放大 这个帖子也是我发的,一样的问题 只是版本不一样

嗯,大概懂了,RD那边有个设置可以配置后测试一下,请稍等。

好的 非常感谢,有进展了 麻烦同步下。

be配置加上
enable_parallel_get_and_bf = false
测试一下

测试了 ,刚开始还好,后面导入速度越来越慢,最后还是读放大
zabbix 磁盘读

iotop

sr 版本:最新版本 3.2.1
添加参数如下:
enable_parallel_get_and_bf = false
flush_thread_num_per_store=5

cumulative_compaction_num_threads_per_disk =10
base_compaction_num_threads_per_disk = 4
cumulative_compaction_check_interval_seconds = 1
base_compaction_check_interval_seconds=10

大佬,有时间帮看下