sysbench insert触发流控

【 TiDB 使用环境】v 6.1.0
8核32G,磁盘IOPS 1.5W
【概述】 场景 + 问题概述
用sysbench压测,准备压测数据(测试时间:2022-08-21 19:00~2022-08-22 07:00)
sysbench --config-file=sysbench.cfg oltp_point_select --tables=32 --table-size=10000000 prepare
12小时数据写了不到2亿,而且越写越慢。看tikv.log没有锁,
【现象】 业务和数据库现象






【问题】 当前遇到的问题
写入慢
【TiDB 版本】
v6.1.0

【附件】 相关日志及配置信息

将数据追加写入内存 mem table。
write_buffer_size 控制memtable存放数据大小,一旦超过这个阈值,memtable 就会将数据转存
memtable 写满之后会将数据转存到immutable memtable中,immutable memtable有一个就开始往磁盘中刷数据
当数据写入过快时,immutable memtable一旦超过5个 lsm就会对memtable 做流控(write stall)

tikv 自身的就有流控机制

有什么优化办法吗?

1、 scheduler latch延迟高 可以看下thread cpu中的scheduler 线程利用率,考虑是否增加线程数,另外也可以考虑增加下 scheduler-concurrency参数
2、流控原因可以看下tikv detail中的write stall reason , 具体是哪一层导致


懒起来scheduler work cpu在20:00-7:00左右CPU使用不高

看起来是IO到达瓶颈了





IO看起来没瓶颈,有流控,write stall正常,到底撒原因触发了流控呢?难道tidb真这么脆?

https://metricstool.pingcap.com/#backup-with-dev-tools 按此导出下 overview ,pd,tidb,tikv的监控,要展开所有面板,等待数据加载完后再导出

这几张图看是没有磁盘瓶颈

tidb.zip (5.4 MB)
大佬帮忙分析!

set config tikv rocksdb.max-background-jobs=
set config tikv rocksdb.max-sub-compactions=
这2个加大试试呢

1、 12小时数据写了不到2亿, 这个是怎么统计的?
2、 sysbench.cfg 里如何写的,用了多少并发?从tidb连接数看只有10个连接


3、从IO上看21:00前还是有比较大的IO量的这段时间应该是写入数据,之后是建索引的过程,tidb截止到目前版本所有建索引的操作都是串行执行的,从监控上看 后面较长时间应该是建索引的过程,建索引过程目前可以调整下面2个参数tidb_ddl_reorg_batch_size、tidb_ddl_reorg_worker_cnt 加快速度,除了用性能好的磁盘目前还没有其他方法。可以admin show ddl jobs看下建索引的时间

prepare的过程是建表,灌入数据,加索引sysbench完成,应该是8个线程的,从21号晚上7点左右执行prepare,到第2天早上7点查看,数据写入到第18张表(每张表1KW数据),sbtest1-8为一批,9-16为一批,前2批已经写入完成,所以预估数据写入量在1.6-2亿之间。

主要是不明白为撒会触发流控。

后面的执行完了,admin show ddl jobs看下 ,从监控看没有write stall

表有索引吗?

kv 用的是SSD 磁盘吗?

还在建表建索引写数据的过程中,应该是先insert数据再创建索引。

ddl.txt (28.4 KB)
sbtest的ddl jobs