DATAX导入数据到TIDB速度“慢”,请各位指导指导(没办法再加服务器)

【 TiDB 使用环境】测试
【 TiDB 版本】V8.1.0
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】使用DATAX导入20个字段的表速度最大只有一万多条/秒,如下图
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
服务器硬盘是HDD


【附件:截图/日志/监控】
DATAX执行日志


Datax脚本文件

{
  "core":{
    "transport":{
      "channel":{
        "speed":{
          "record":-1,
          "byte":-1,
          "batchSize": 4096
        }
      }
    }
  },
  "job": {
    "setting": {
      "speed": {
        "channel": 1
      }
    },
    "content": [
      {
        "reader": {
          "name": "oraclereader",
          "parameter": {
            "username": "test",
            "password": "1111111",
            "connection": [
              {
                "jdbcUrl": [
                  "jdbc:oracle:thin:@192.168.0.22:1521:orcl"
                ],
                "querySql": [
                  "select EVALUATE_DETAIL_OPTION_ID ,EVALUATE_DETAIL_OPTION_CODE ,EVALUATE_DETAIL_CODE ,PROJECT_CODE ,USER_CODE ,TEACHING_CLASS_CODE ,OPTION_CODE ,KPI_CODE ,KPI_TYPE ,KPI_NAME ,OPTION_VALUE ,OPTION_SCORE ,VALID_CODE ,OPERATOR_ID ,UNIVERSITY_ID ,CREATED_DATE ,STATE ,STATE_DATE ,MEMO ,EVALUATE_CODE
from DSJ10035828"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "writeMode": "insert",
            "username": "test",
            "password": "1111111",
            "column": ["EVALUATE_DETAIL_OPTION_ID" ,"EVALUATE_DETAIL_OPTION_CODE" ,"EVALUATE_DETAIL_CODE" ,"PROJECT_CODE" ,"USER_CODE" ,"TEACHING_CLASS_CODE" ,"OPTION_CODE" ,"KPI_CODE" ,"KPI_TYPE" ,"KPI_NAME" ,"OPTION_VALUE" ,"OPTION_SCORE" ,"VALID_CODE" ,"OPERATOR_ID" ,"UNIVERSITY_ID" ,"CREATED_DATE" ,"STATE" ,"STATE_DATE" ,"MEMO" ,"EVALUATE_CODE"],
            "preSql": ["truncate table asf_dsj10035828"],
            "postSql": ["select 1 from dual"],
            "batchSize": 15000,
            "connection": [
              {
                "jdbcUrl": "jdbc:mysql://192.168.0.12:4000/mysql_dev_raw?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&remarks=true&useInformationSchema=true",
                "table": [
                  "`asf_dsj10035828`"
                ]
              }
            ]
          }
        }
      }
    ]
  }
}

表结构

CREATE TABLE `asf_dsj10035828` (
  `evaluate_detail_option_id` decimal(38,0) DEFAULT NULL,
  `evaluate_detail_option_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `evaluate_detail_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `project_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `user_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `teaching_class_code` varchar(120) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `option_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `kpi_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `kpi_type` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `kpi_name` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `option_value` varchar(2000) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `option_score` decimal(10,2) DEFAULT NULL,
  `valid_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `operator_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `university_id` decimal(38,0) DEFAULT NULL,
  `created_date` timestamp NULL DEFAULT NULL,
  `state` varchar(3) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `state_date` timestamp NULL DEFAULT NULL,
  `memo` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `evaluate_code` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

监控相关截图





如果条件允许,可以先用DataX 把数据转成 insert into 这样格式的 SQL 脚本,

可以用 import into 或者 lightning 来导入


然后参考:
https://docs.pingcap.com/zh/tidb/stable/sql-statement-import-into
https://docs.pingcap.com/zh/tidb/stable/import-into-vs-tidb-lightning

谢谢。
因为是用datax封装的数据集成工具,所以这个方案不太可行

看下 Dashboard有热点吗

就你的情况来说,以下因素会影响速度:
1、你的pd和tikv混合部署的,因为二者都会存储信息到磁盘,磁盘的写入读取延迟会直接影响到 PD 和 TiKV 的服务延迟,二者尽量不要混合部署
2、你的表中主键是如何设置的,有没有连续,如果是连续的,可能会出现写入热点,负载达不到效果,导致速度变慢,这个可以到dashboard监控面板的可视化菜单界面看一下

batchSize 调小,并行调高,表加 shard_rowid_bits ,per_split_region ,观察监控

表没有设置主键,建表时添加了SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=4,速度几乎没什么变化

并行调高的并行是Datax的channel数吗

颜色那么亮,你这明显出现热点问题了,鼠标悬浮到亮的地方,看看有没有你的表

是我正在导入的表

我的表没有设置主键,我对表设置了SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=4,不是应该避免写热点了吗

Batchsize调小点试试,2000

几乎没什么变化

那你这个感觉没有生效啊,看下你的表的真实region有几个都分布在那些节点上

是的,看起来是调整 channel ,调整后你可以通过监控的 active session 查看生效没有

show table asf_dsj10035828 regions 看下

刚开始导入的时候有16个REGION,当导入到700W左右的时候,新增了十多个REGION

导入持续了多久? 从你给的监控图来看 tikv 只是到了 68.9% ,后面是不是几乎打满了? 有覆盖整个导入过程的监控吗?

总耗时:

TI-KV DETAILS-CLUSTER -CPU


TI-KV THREAD CPU

我把DATAX的batchSize改成15000还是快一些,现在batchSize是2000