数据插入tidb集群耗时越来越长,最终导致数据库连接中断,程序崩溃

数据插入tidb集群耗时越来越长,最终导致数据库连接中断,程序崩溃。
目前集群的配置是使用3台虚拟机,虚拟机的配置为8核cpu,16g内存,100磁盘。写入的数据为每次写入5000条,每秒写入10次。
查看监控可以发现最长的插入时间达到了10分钟:


有查询了部分错误日志:

在TiDB Dashboard 上分析慢查询的执行流程,先确认是哪个环节最慢,然后再进行对于的分析处理

:joy:上CPU和存储的监控图,每条insert后只跟一个值还是5000个值?

表结构也发一下,热点了吧

每条insert后只跟5000个值的

表上有主键没,值是连续的吗?比如(1,xx),(2,xx)这样

CREATE TABLE GponPmOnuLocalInfos (
node_id_str varchar(100) NOT NULL COMMENT ‘设备的hostname,为设备在网络中的唯一标识’,
subscription_id_str varchar(100) NOT NULL COMMENT ‘订阅名称’,
collection_id bigint(20) unsigned NOT NULL COMMENT ‘标识采样轮次’,
collection_start_time datetime DEFAULT NULL COMMENT ‘标识采样轮次开始时间’,
name varchar(100) DEFAULT NULL COMMENT ‘//ONU名称,格式:v_ani.f.s.p.onuid’,
channel varchar(100) DEFAULT NULL,
index int(10) unsigned DEFAULT NULL,
olt_rx_power int(10) DEFAULT NULL COMMENT ‘//OLT光模块接收到ONU的光功率,单位:0.01dBm’,
online_duration int(10) unsigned DEFAULT NULL COMMENT ‘//在线时长,单位:秒’,
last_down_time int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线时间’,
last_down_cause int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线原因’,
onu_status int(10) unsigned DEFAULT NULL COMMENT ‘//ONU状态,1-online,2-offline,255-invalid’,
PRIMARY KEY (node_id_str,subscription_id_str,collection_id)
) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;

cpu/内存监控:

:joy:你是不是三个节点上tidb 、pd、tikv 都有,然后insert的tidb server只连了蓝色?

设置了主键,你看下表结构:
CREATE TABLE GponPmOnuLocalInfos (
node_id_str varchar(100) NOT NULL COMMENT ‘设备的hostname,为设备在网络中的唯一标识’,
subscription_id_str varchar(100) NOT NULL COMMENT ‘订阅名称’,
collection_id bigint(20) unsigned NOT NULL COMMENT ‘标识采样轮次’,
collection_start_time datetime DEFAULT NULL COMMENT ‘标识采样轮次开始时间’,
name varchar(100) DEFAULT NULL COMMENT ‘//ONU名称,格式:v_ani.f.s.p.onuid’,
channel varchar(100) DEFAULT NULL,
index int(10) unsigned DEFAULT NULL,
olt_rx_power int(10) DEFAULT NULL COMMENT ‘//OLT光模块接收到ONU的光功率,单位:0.01dBm’,
online_duration int(10) unsigned DEFAULT NULL COMMENT ‘//在线时长,单位:秒’,
last_down_time int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线时间’,
last_down_cause int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线原因’,
onu_status int(10) unsigned DEFAULT NULL COMMENT ‘//ONU状态,1-online,2-offline,255-invalid’,
PRIMARY KEY (node_id_str,subscription_id_str,collection_id)
) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;

上下磁盘的监控,或者你再启下insert程序,然后用dstat 1 或 vmstat 1输出下主机状态,截个图

三个tidb都有连接的,都出现了超过10min的时间

不是聚簇表吧,改成聚簇表插入试试

你看下磁盘监控:

:joy:怎么还有断断续续的线,tikv挂过?

晚上9点左右过后,有挂过

存储是什么?ssd?机械?我还是建议再跑下insert,截个系统状态图(dstat 1 或 vmstat 1)
或者去普罗米修斯里找disk的监控

你看下表结构,要怎么改呢:
CREATE TABLE GponPmOnuLocalInfos (
node_id_str varchar(100) NOT NULL COMMENT ‘设备的hostname,为设备在网络中的唯一标识’,
subscription_id_str varchar(100) NOT NULL COMMENT ‘订阅名称’,
collection_id bigint(20) unsigned NOT NULL COMMENT ‘标识采样轮次’,
collection_start_time datetime DEFAULT NULL COMMENT ‘标识采样轮次开始时间’,
name varchar(100) DEFAULT NULL COMMENT ‘//ONU名称,格式:v_ani.f.s.p.onuid’,
channel varchar(100) DEFAULT NULL,
index int(10) unsigned DEFAULT NULL,
olt_rx_power int(10) DEFAULT NULL COMMENT ‘//OLT光模块接收到ONU的光功率,单位:0.01dBm’,
online_duration int(10) unsigned DEFAULT NULL COMMENT ‘//在线时长,单位:秒’,
last_down_time int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线时间’,
last_down_cause int(10) unsigned DEFAULT NULL COMMENT ‘//最后一次下线原因’,
onu_status int(10) unsigned DEFAULT NULL COMMENT ‘//ONU状态,1-online,2-offline,255-invalid’,
PRIMARY KEY (node_id_str,subscription_id_str,collection_id)
) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;

主键后加 关键词 :CLUSTERED
https://docs.pingcap.com/zh/tidb/stable/clustered-indexes#聚簇索引

你这是建表没有设置AUTO_RANDOM,写入有热点问题。