插入慢

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.1.2
【复现路径】压力测试
【遇到的问题:问题现象及影响】
插入慢
【资源配置】
3tidb(虚拟机)+3pd(虚拟机)+3tikv(物理机)
虚拟机配置32cpu+64G内存+1T SATA SSD
物理机 48cpu+256G内存 + 3.5T SATA SSD
【附件:截图/日志/监控】

表结构:
CREATE TABLE news_bak (
id bigint(20) NOT NULL COMMENT ‘新闻id’,
class_id int(11) NOT NULL COMMENT ‘分类’,
dealer_id int(11) NOT NULL COMMENT ‘经销商ID’,
title varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘标题’,
short_title varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ‘短标题’,
author varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ‘作者’,
summary varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ‘摘要’,
publish_time datetime(3) DEFAULT NULL COMMENT ‘发布时间’,
show400Num tinyint(4) DEFAULT NULL COMMENT ‘是否显示400’,
show_auto_call tinyint(4) DEFAULT NULL COMMENT ‘是否显示autoCall’,
show_sale_addr tinyint(4) DEFAULT NULL COMMENT ‘是否显示地址’,
show_map tinyint(4) DEFAULT NULL COMMENT ‘是否显示地图’,
source int(11) DEFAULT NULL COMMENT ‘新闻来源:0老数据 1经销商新闻 2导入新闻 3厂商新闻计划 4易车软文 5日产购车助手系统\r 操作异常的记录isactive置为0,同时此字段设置为10000’,
imported_car tinyint(4) DEFAULT NULL COMMENT ‘是否进口车新闻’,
url varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘url’,
external_id int(11) DEFAULT NULL COMMENT ‘external_id’,
dealer_account_id int(11) DEFAULT ‘0’ COMMENT ‘商家帐号ID’,
last_update_dealer_account_id int(11) DEFAULT ‘0’ COMMENT ‘最后更新商家账号’,
source_app_id int(11) DEFAULT NULL COMMENT ‘来源APPID’,
template_news tinyint(4) DEFAULT NULL COMMENT ‘是否模板新闻’,
energy_type int(11) DEFAULT NULL COMMENT ‘能源类型,1 新能源新闻 0 :混合新能源新闻’,
status int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘状态 1审核中,2已发布(先发后审:默认给2;先审后发给1),3已驳回,4草稿’,
check_status int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘审批状态 1审核中,2通过,3驳回’,
reason varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ‘意见’,
uuid varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘uuid’,
deleted tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘是否删除 0未删除,1已删除’,
created_by varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘创建人’,
created_time datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT ‘记录创建时间’,
updated_by varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘更新人’,
updated_time datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT ‘记录修改时间’,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEY ix_news_dealer_id_createtime_deleted (dealer_id,deleted,created_time),
KEY ixnews_template_news (dealer_id,template_news,deleted,publish_time,check_status,class_id),
KEY ix_news_template_deleted (template_news,deleted,publish_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=‘新闻’;

慢查询:
INSERT INTO news_bak ( id, class_id, dealer_id, title, author, summary, publish_time, show400Num, show_auto_call, show_sale_addr, show_map, source, imported_car, url, dealer_account_id, last_update_dealer_account_id, source_app_id, template_news, energy_type, status, check_status, uuid, deleted, created_by, created_time, updated_by, updated_time ) VALUES ( 167514265806, 4, 100056451, ‘五菱宏光MINI GAMEBOY潮酷新色火爆交车’, ‘100056451’, ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,备受用户青睐,订单量持续攀升,线下交车势头火爆。新车搭配潮酷新色,更有充电快、送电桩等优势加持,带给年轻人更随心惬意的出行体验。 (GAMEBOY青柠苏打&落樱缤纷) 潮酷新色上线,满足用户个性新表达 自GAMEBOY上市以来,伴随着越来越多的用户加入潮玩阵营, GAMEBOY此次再推出活力飒爽的青柠苏打、甜酷的落樱缤纷两款新色,满足更多圈层群体的个性化需求表达。同时,此次上新诚意而来,加色不加价,获得大批车主青睐,全国持续火热交车中。 (GAMEBOY落樱缤纷车主) 为带给用户更多互动惊喜’, ‘2023-01-16 09:08:00’, 1, 0, 1, 1, 0, 0, ‘/100056451/news/202301/877334359.html’, 1050422, 0, 1, 0, 2, 1, 1, ‘70A9615C-4352-8976-5AB8-37416B498654’, 0, ‘1050422’, ‘2023-01-16 09:08:00’, ‘0’, ‘2023-01-16 09:08:00’ ) ON DUPLICATE KEY UPDATE created_time=NOW(),updated_time=NOW(),summary=‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX。新车搭配潮酷新色,更有充电快、送电桩等优势加持,带给年轻人更随心惬意的出行体验。 (GAMEBOY青柠苏打&落樱缤纷) 潮酷新色上线,满足用户个性新表达 自GAMEBOY上市以来,伴随着越来越多的用户加入潮玩阵营, GAMEBOY此次再推出活力飒爽的青柠苏打、甜酷的落樱缤纷两款新色,满足更多圈层群体的个性化需求表达。同时,此次上新诚意而来,加色不加价,获得大批车主青睐,全国持续火热交车中。 (GAMEBOY落樱缤纷车主) 为带给用户更多互动惊喜’;

各阶段耗时:

请问如何优化?

看下 Performance-Overview 的Duration监控

这个插入是慢查询?

batch insert 是否有改观呢?

看截图好像是有锁冲突

看看是不是有锁,是不是有热块,你这个表的主键id,应用侧是怎么生成的?如果是顺序递增的话,很容易热块吧,而且如果有多个线程同时对同一行数据进行处理,很容易产生锁。

这是update,不是插入

整体集群的情况怎么样?之前我们 IO 高也有简单插入语句慢的
还有就是只有这个 insert into 是慢查询嘛(如果只是这个可以考虑楼上批量插入,单条太多在等)?其他的慢查询是什么情况,有时候会互相影响的,这个 sql 可能本身不慢,只是被影响

去看下热力图中这个sql执行的时间点这个表有无热点,有热点就切分region,在到sql分析上差下当前时间点对这个表操作是不是有很多,有可能就是插入或者更新有冲突,