TIDB 4.0-rc中写入压测性能浮动太大

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:TIDB 4.0-rc
  • 【问题描述】:写入性能浮动太大,sysbench使用insert一开始1.4w过了3分钟后下降到6k

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

  1. 请提供集群拓扑以及服务器配置,如 TiDB ,TiKV ,PD 的节点数量,内存,CPU,磁盘类型 等

  2. 使用 sysbench 压测并且没有改造表结构,使用原始的 pk 为 auto increment 很可能会出现热点现象,可以通过下述途径来排查和确认:

  • 4.0 Dashboard --> Key Visualizer 确认下是否存在热点,如下:

  • 热点排查文档

TIDB:3台8核16g ssd PD:3台8核16g ssd TIKV:6台8核16g ssd

热点图:

确实是自增主键,我看文档里描述只能使用AUTO_RANDOM主键来解决,但是只是试验性的,是否还有其他的方式呢?

如果不使用 auto_random 主键来处理, 可以参考使用:shard_row_id_bits 以及 pre_split_regions ,注意 shard_row_id_bits 只能在 Primary key 为非 int 类型或者没有 Primary key 的表使用。所以原来的 auto_increment 的主键需要设置成 Unqiue key 。

那这样就需要在程序里面计算id了?

在使用auto_random的时候进行insert压力也出现了这种情况。

下面是热点图

1、如果要具体查看 qps ,建议再次查看一下 grafana 中 tidb 相关的监控指标,确认下压测时期 tidb server 的情况

2、如果是在压测时期,tidb server 监控页面同时不符合预期,那么请上传压测时期 tidb 、tikv-details 以及 pd 的监控面板。监控导出方式如下:

1)使用 chrome 浏览器,安装“Full Page Screen Capture”插件: https://chrome.google.com/webstore/detail/full-page-screen-capture/fdpohaocaechififmbbbbbknoalclacl

2)展开grafana 监控的 “cluster-name-overview” 的所有 dashboard (先按 d 再按 E 可将所有 Rows 的 Panels 打开,需等待一段时间待页面加载完成)

3)使用插件导出 pdf

3、 提供压测表的表结构

再次使用Insert脚本压测了一下。 压测表结构: CREATE TABLE sbtest1 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest2 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest3 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest4 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest5 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest6 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest7 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest8 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest9 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

CREATE TABLE sbtest10 ( id int(11) NOT NULL auto_random, k int(11) NOT NULL DEFAULT 0, c char(120) NOT NULL DEFAULT ‘’, pad char(60) NOT NULL DEFAULT ‘’, PRIMARY KEY (id), KEY k_1 (k) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

热力图:

性能测试截图:

监控面板:

  1. 从图上看,似乎没有明显的热点信息。
  2. 麻烦反馈 tidb,detail-tikv 信息,另外从over-view 看到IO到达了 100%,请上传 disk-performance信息,注意选择tikv的ip,多谢。(时间段与overi-view时间段选择一致)

tidb

kv-details

disk-performance是在哪个监控面板?

  1. 从 detai-tikv 查看 99 message duration ,达到1s 以上

  1. 从 detail-tikv 查看,propose wait duration 中 35 的 duration 很高

  1. 进一步查看 raft log duration , 35 的 append log 和 apply log 都比其他节点要高很多

  1. 检查下 35 节点的配置,硬盘写入速度是否和其他节点一致

  2. 如果确认35 和 其他节点配置一样,可以挑 35 和 47 节点反馈,问题发生时的 disk-performacne 和 node-exporter 监控信息

disk-performance
35:

47:

node-exporter
35:

47:

  1. 从磁盘监控看到有很多的page in 和page out

  2. 看cpu中的iowait也已经很高了

  3. 查看 compaction flow 过高,导致的大量 IO

  4. 可以尝试流控,调整参数(这里确认下,感觉您的盘不是nvme吧)

https://github.com/tikv/tikv/blob/master/etc/config-template.toml#L458

[rocksdb]

rate-bytes-per-sec = “100MB”

[raftdb]

rate-bytes-per-sec = “50MB”

这两个参数能限制 kvdb 和 raftdb 的写盘峰值,平滑写盘压力。一般盘比较差的时候能缓解抖动问题

收到,谢谢~

先尝试下,有问题再反馈