Tidb V4.0.12 VS V5.0.0 insert性能对比

环境说明

集群拓扑

配置文件

在相同的服务器上部署V4.0.12和V5.0.0两个版本的集群,部署参数两个集群都相同,下面参数做了调整:

server_configs:
  tidb:
    log.slow-threshold: 2000
    binlog.enable: false
    binlog.ignore-error: false
  tikv:
    storage.block-cache.capacity: "2GB"
    readpool.storage.use-unified-pool: false
    readpool.coprocessor.use-unified-pool: true
  pd:
    schedule.leader-schedule-limit: 4
    schedule.region-schedule-limit: 2048
    schedule.replica-schedule-limit: 64

压测

我们这边目前线上4.0的集群有个场景只是单纯的insert,所以我这边先只测下insert场景,看看5.0的异步提交能给insert场景加速多少。
使用sysbench 初始化100万数据,对比哪个集群写入的快

  • sysbench配置如下:
mysql-host=xx.xx.184.43
mysql-port=4005 #5.0.0集群
mysql-port=4000 #4.0.12集群
mysql-user=root
mysql-password=xxx
mysql-db=sbtest
time=1200
threads=64
report-interval=10
db-driver=mysql
  • 压测命令
time sysbench oltp_common --config-file=config_4  --table-size=1000000 prepare
time sysbench oltp_common --config-file=config_5  --table-size=1000000 prepare
  • 压测说明
    因为两个集群是部署在相同的服务器上,为了没有集群间相互影响,压测是窜行的,即当4.0的压测结束才会进行5.0的压测
  • 压测结果
版本 压测数据量 结果 参数 轮数
V4.0.12 100w 0m52.055s tidb_dml_batch_size=20000 第一轮
V5.0.0 100w 1m8.385s 异步提交开启,tidb_dml_batch_size=0 第一轮
V4.0.12 100w 0m52.917s tidb_dml_batch_size=20000 第二轮
V5.0.0 100w 1m7.428s 异步提交开启,tidb_dml_batch_size=20000 第二轮
V5.0.0 100w 1m5.904s 异步提交关闭,tidb_dml_batch_size=20000 第二轮
V4.0.12 1000w 8m55.257s tidb_dml_batch_size=20000 第三轮
V5.0.0 1000w 12m28.236s 异步提交开启,tidb_dml_batch_size=20000 第三轮
  • 结论
    从压测结果看无论是5.0开启异步提交还是关闭异步提交,还有开启批量提交,insert的性能都没有4.0的好,感觉这个不是预期内的
3赞

是不是配置限制了性能? 坐等后续的评测

我升级到5.0后INFORMATION_SCHEMA,METRICS_SCHEMA,PERFORMANCE_SCHEMA三个库的表在navicat里不显示了,其他库都正常,你是这样的 吗

不是,我的正常呢

目前还没发现有

这里有两个点:
1,Prepare 下降,是 5.0 将 batch dml 改成了大事务,通过大事务以满足严格的 ACID 语义。这个原因是已知的,我们内部在核实是否下降、有没有提升的方式
2,Run 过程有没有回退,我们内部测试过有提升,没回退。需要您跑完真实的 run 过程之后 post 一下结果数据,最好能带上 metrics

感谢!

我们的实际场景就是insert,所以我只是先简单测下insert场景,看下5.0对insert这种场景是否有加速

5.0 insert 没有4.0性能好是因为5.0废弃了sync-log(这个是从数据安全的角度考虑的),sync-log 默认为 true,切不能修改,如果4.0的sync-log也设置为true的话,性能是要比5.0差一些的

我4.0.12的也不显示,大写库名字下的表都没有显示。不知道为啥