TiDB写入非常慢

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 目前通过大数据集群导入TiDB批量写入非常慢,已经到了无法忍受的地步。

【背景】 除了一些基础配置,没有进行调优。

【现象】


能发一下KV与PD层的监控吗?

使用什么工具和方式导入,表结构发下

发的这些图,看不出什么

如果想更快速定位,通过 Dashboard 去看看热力图和 slow query 会更有帮助

1 个赞

用什么工具导入的?
集群的负载,io负载等发一下吧

可以查看一下磁盘利用率,iops情况。

能发一下IO的监控么?


普通的 sas盘吧

这个大批量是多大?逐条提交还是批量提交?

是SSD的,很奇怪的现象,别的5千万级别的表,就没有问题,有一张表只有200w,但是会报错。连续5天了。

报错是什么错?是不是因为每一批数据量太大引起的?

数据导入方式什么样? 表里有什么特殊字段吗? 看IO都满了,是在导入这个表时满的吗?

1 个赞

打满了的那个磁盘是不是异常了?

现在1批插入100条

CREATE TABLE `ads_sale_detail` (
  `biz_id` varchar(128) NOT NULL COMMENT '主键ID(sdt销售日期&order_no订单号&goods_code商品编码)',
  `region_code` varchar(4) NOT NULL COMMENT '销售大区编码',
  `region_name` varchar(8) NOT NULL COMMENT '销售大区名称',
  `province_code` varchar(4) NOT NULL COMMENT '省区编码',
  `province_name` varchar(16) NOT NULL COMMENT '省区名称',
  `city_group_code` varchar(16) NOT NULL COMMENT '城市组编码',
  `city_group_name` varchar(16) NOT NULL COMMENT '城市组名称',
  `customer_no` varchar(16) NOT NULL COMMENT '客户编码',
  `customer_name` varchar(128) NOT NULL COMMENT '客户名称',
  `order_no` varchar(32) NOT NULL COMMENT '订单号',
  `dc_code` varchar(16) NOT NULL COMMENT '库存地点编码',
  `dc_name` varchar(128) NOT NULL COMMENT '库存地点名称',
  `goods_code` varchar(32) NOT NULL COMMENT '商品编码',
  `goods_name` varchar(256) NOT NULL COMMENT '商品名称',
  `classify_large_code` varchar(16) NOT NULL COMMENT '大类编码',
  `classify_large_name` varchar(16) NOT NULL COMMENT '大类名称',
  `classify_middle_code` varchar(16) NOT NULL COMMENT '中类编码',
  `classify_middle_name` varchar(32) NOT NULL COMMENT '中类名称',
  `classify_small_code` varchar(16) NOT NULL COMMENT '小类编码',
  `classify_small_name` varchar(32) NOT NULL COMMENT '小类名称',
  `raw_material_cost` decimal(20,6) NOT NULL COMMENT '原料成本',
  `raw_material_qty` decimal(20,6) NOT NULL COMMENT '原料数量',
  `purchase_cost` decimal(20,6) NOT NULL COMMENT '采购成本',
  `purchase_qty` decimal(20,6) NOT NULL COMMENT '采购数量',
  `sales_qty` decimal(20,6) NOT NULL COMMENT '销售数量',
  `sales_value` decimal(20,6) NOT NULL COMMENT '含税销售金额',
  `sales_cost` decimal(20,6) NOT NULL COMMENT '含税销售成本',
  `profit` decimal(20,6) NOT NULL COMMENT '含税定价毛利额',
  `goods_profit_rate` decimal(20,6) NOT NULL COMMENT '订单单品含税定价毛利率',
  `middle_office_cost` decimal(20,6) NOT NULL COMMENT '中台成本',
  `front_profit` decimal(20,6) NOT NULL COMMENT '前端毛利额',
  `sdt` varchar(16) NOT NULL COMMENT '销售日期',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` varchar(64) NOT NULL DEFAULT 'TEST' COMMENT '创建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `update_by` varchar(64) NOT NULL DEFAULT 'TEST' COMMENT '创建人',
  PRIMARY KEY (`biz_id`),
  KEY `sdt_code` (`sdt`,`region_code`,`province_code`,`city_group_code`,`customer_no`,`order_no`,`goods_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='销售成本';

sqoop 导入的

TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction

我想着,100条一批循环插入,不应该有问题,事务也不会太大。