为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:TIDB 4.0-rc
- 【问题描述】:写入性能浮动太大,sysbench使用insert一开始1.4w过了3分钟后下降到6k
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
请提供集群拓扑以及服务器配置,如 TiDB ,TiKV ,PD 的节点数量,内存,CPU,磁盘类型 等
使用 sysbench 压测并且没有改造表结构,使用原始的 pk 为 auto increment 很可能会出现热点现象,可以通过下述途径来排查和确认:
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 。
https://pingcap.com/docs-cn/stable/sql-statements/sql-statement-split-region/#pre_split_regions
https://pingcap.com/docs-cn/stable/tidb-specific-system-variables/#shard_row_id_bits
那这样就需要在程序里面计算id了?
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;
热力图:
性能测试截图:
监控面板:
tidb
https://test.dianbo.zycourse.com/tidb/screenshot/tidb_202005231011.pdf
kv-details
https://test.dianbo.zycourse.com/tidb/screenshot/tikv_202005231011.pdf
disk-performance是在哪个监控面板?
检查下 35 节点的配置,硬盘写入速度是否和其他节点一致
如果确认35 和 其他节点配置一样,可以挑 35 和 47 节点反馈,问题发生时的 disk-performacne 和 node-exporter 监控信息
disk-performance
35:
https://test.dianbo.zycourse.com/tidb/screenshot/35-disk.png
47:
node-exporter
35:
https://test.dianbo.zycourse.com/tidb/screenshot/35-node.pdf
47:
https://test.dianbo.zycourse.com/tidb/screenshot/47-node.pdf
从磁盘监控看到有很多的page in 和page out
看cpu中的iowait也已经很高了
查看 compaction flow 过高,导致的大量 IO
可以尝试流控,调整参数(这里确认下,感觉您的盘不是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 的写盘峰值,平滑写盘压力。一般盘比较差的时候能缓解抖动问题
收到,谢谢~
先尝试下,有问题再反馈