TiDB写入慢

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v4.0.0
pd 4u 8G
db 16u 64G
kv 16U 64G
flash 32u 128G


【问题描述】
TiDB写入非常慢,是单机版mysql的6倍多。
TIDB10个节点,标准的3331,TiKV是ssd,腾讯云的ssd,用了腾讯云的负载均衡。
单机版mysql也是腾讯云的ssd
同样是5301条数据,mysql 14s,tiDB是1.5分钟。很夸张。


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。



可以先参考文档按照写入流程进行排查一下

就这个配置,TiDB的正常写入速度是多少,或者你们有压测报告吗?各项指标看了没啥异常。感觉TiDB的写入是不是就是这个效率,这么低,

https://docs.pingcap.com/zh/tidb/stable/benchmark-sysbench-v4-vs-v3#测试方案
这是官方的 sysbench 性能压测报告。

TiDB 是一个分布式数据库,追求的是水平扩展能力,MySQL 是单机数据库,如果对于单机 MySQL 可以搞定的场景,其实没有必要上 TiDB 。

单机版已经快到瓶颈了。各项指标都到顶峰了,需要一个分布式架构的数据库支撑,后续可扩展,而且单机的查询性能不行。

导出一下 Overview 、TiDB 、PD 、TiKV-Details 面板写入慢时间段的监控看下
导出监控方式:https://metricstool.pingcap.com/

Overview:
D-Overview_2021-02-24T08_14_00.408Z.json (1.4 MB)
TiDB:
D-TiDB_2021-02-24T08_26_17.117Z.json (2.2 MB)
PD:
D-PD_2021-02-24T08_18_33.573Z.json (1.7 MB)
TiKV:
D-TiKV-Details_2021-02-24T08_21_46.655Z.json (7.2 MB)

应用场景中update和upsert的比例较高,问题的截图是一个upsert的任务。

看监控的数据库 duration 不高,系统资源使用率也不是很高,所以数据库没什么压力,可以考虑增加并发写入来加快数据写入。

TiDB 写入的时候,涉及到 TiDB 与 PD 之间的网络交互,TiDB 与 TIKV 之间的网络交互,整个写入流程环节会比 MySQL 多,耗时也会更长。

增加并发是指客户端增加,还是服务端也有设置呢。

增加客户端并发压力

开多线程去写吗?还是客户端有啥配置可以操作

在dashboard 中看一下流量图。查一下有没有写入热点。如果有看一下具体是哪些表。

热点问题参考一下这个:
https://docs.pingcap.com/zh/tidb/stable/high-concurrency-best-practices#热点产生的实例

split region 或 shard_id

https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region#split-region-使用文档

https://docs.pingcap.com/zh/tidb/stable/shard-row-id-bits#shard_row_id_bits

按照我的使用经验,MySQL数据挪到TiDB后,尤其是OLTP服务,最好是使用TiDB 5.X,开启聚簇索引重新设计主键使数据尽可能分散。这样写入和查询性能都会比较高效

关注一下。
表结构是咋样的, 可以分享一下吗?
还有你这个图片是啥啥工具的输出, 为啥 tidb 的input size 高这么多?
刚好差距差不多 7 倍, 耗时也差不多 7 倍。

就是spark的监控界面。表结构是一样的。你说的大小这块没注意。表结构不大方便分享。我看看这个大小吧,不知道为啥输入这么大。应该是一样的才对。

建议升级集群至 v5.x 版本,v4.0.0 是早期的 4.x 版本,在性能和稳定性上都有所不足,bug 也相对较多。