作者: xxxxxxxx 原文来源:https://tidb.net/blog/c60878fa
一、环境介绍
1、集群节点情况
两套集群的 tikv 节点都是三个,且在相同的机器,自定义的配置都是一致其余配置使用的是相应版本的默认值。
tikv 的机器内存 /cpu 分别为 192GB/48C。
二、开始测试
1、prepare
sysbench /usr/local/sysbench/src/lua/oltp_read_write.lua \
--mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor \
--mysql-user=test --mysql-password=123456 --table_size=10000000 \
--tables=32 --threads=8 --report-interval=10 --time=60 prepare
复制代码
192.168.1.100 是 vip,rs 绑了三个 tidb 节点。
2、run
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_point_select.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=50 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_read_write.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=50 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_non_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=50 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=50 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_insert.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=50 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_point_select.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=100 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_read_write.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=100 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_non_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=100 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=100 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_insert.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=100 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_point_select.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=200 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_read_write.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=200 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_non_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=200 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_update_index.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=200 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
sleep 120
/usr/local/sysbench/bin/sysbench /usr/local/sysbench/src/lua/oltp_insert.lua --mysql-host=192.168.1.100 --mysql-port=15122 --mysql-db=tidb_monitor --mysql-user=test --mysql-password=123456 --table_size=100000000 --tables=32 --threads=200 --report-interval=10 --time=120 --db-driver=mysql --mysql-ignore-errors=1317,1105,1062,2013,8028,9007 --auto-inc=false run
复制代码
两个版本都是使用这个测试脚本。
(1)oltp_point_select
下图是 4.0.13 版本 50 并发测试点查的监。
process-info.png
下图是 7.5.5 版本 50 并发测试点查的监控。
process-info.png
在 50 并发的点查场景下4.0.13
的 QPS 比7.5.5
高13.6%
左右。
下图是 4.0.13 版本 100 并发测试点查的监。
process-info.png
下图是 7.5.5 版本 100 并发测试点查的监控。
process-info.png
在 100 并发的点查场景下4.0.13
的 QPS 比7.5.5
高8.5%
左右。
下图是 4.0.13 版本 200 并发测试点查的监。
process-info.png
下图是 7.5.5 版本 200 并发测试点查的监控。
process-info.png
在 200 并发的点查场景下4.0.13
的 QPS 比7.5.5
高7.3%
左右。
可以发现4.0.13
版本更胜一筹,但是随着并发数的增加,4.0.13
与7.5.5
的差距越来越小。
(2)oltp_read_write
下图是 4.0.13 版本 50 并发测试混合读写的监控。
process-info.png
下图是 7.5.5 版本 50 并发测试混合读写的监控。
process-info.png
在 50 并发的混合读写场景下7.5.5
的 QPS 比4.0.13
高11.6%
左右,TPS 也高11.6%
左右。
下图是 4.0.13 版本 100 并发测试混合读写的监控。
process-info.png
下图是 7.5.5 版本 50 并发测试混合读写的监控
process-info.png
在 100 并发的混合读写场景下7.5.5
的 QPS 比4.0.13
高14.7%
左右,TPS 也高14.7%
左右。
下图是 4.0.13 版本 200 并发测试混合读写的监控。
process-info.png
下图是 7.5.5 版本 200 并发测试混合读写的监控
process-info.png
在 200 并发的混合读写场景下7.5.5
的 QPS 比4.0.13
高19.0%
左右,TPS 也高19.0%
左右。
可以发现7.5.5
版本更胜一筹,但是随着并发数的增加,4.0.13
与7.5.5
的差距越来越大。
(3)oltp_update_non_index
下图是 4.0.13 版本 50 并发测试 update(非索引字段)的监控。
process-info.png
下图是 7.5.5 版本 50 并发测试 update(非索引字段)的监控。
process-info.png
在 50 并发的更新(非索引字段)场景下4.0.13
的 QPS 比7.5.5
高10.8%
左右。
下图是 4.0.13 版本 100 并发测试 update(非索引字段)的监控。
process-info.png
下图是 7.5.5 版本 100 并发测试 update(非索引字段)的监控
process-info.png
在 100 并发的更新(非索引字段)场景下4.0.13
的 QPS 比7.5.5
高6.1%
左右。
下图是 4.0.13 版本 200 并发测试 update(非索引字段)的监控。
process-info.png
下图是 7.5.5 版本 200 并发测试 update(非索引字段)的监控
process-info.png
在 200 并发的更新(非索引字段)场景下4.0.13
的 QPS 比7.5.5
高4.2%
左右。
可以发现4.0.13
版本更胜一筹,但是随着并发数的增加,4.0.13
与7.5.5
的差距越来越小。
(4)oltp_update_index
下图是 4.0.13 版本 50 并发测试 update(索引字段)的监控。
process-info.png
下图是 7.5.5 版本 50 并发测试 update(索引字段)的监控。
process-info.png
在 50 并发的更新(索引字段)场景下4.0.13
的 QPS 比7.5.5
高6.4%
左右。
下图是 4.0.13 版本 100 并发测试 update(索引字段)的监控。
process-info.png
下图是 7.5.5 版本 100 并发测试 update(索引字段)的监控
process-info.png
在 100 并发的更新(索引字段)场景下4.0.13
的 QPS 比7.5.5
高0.9%
左右。
下图是 4.0.13 版本 200 并发测试 update(索引字段)的监控。
process-info.png
下图是 7.5.5 版本 200 并发测试 update(索引字段)的监控
process-info.png
在 200 并发的更新(索引字段)场景下7.5.5
的 QPS 比4.0.13
高3.2%
左右。
可以发现在 200 并发之前4.0.13
版本更胜一筹,但是随着并发数的增加,4.0.13
与7.5.5
的差距越来越小,甚至在达到 200 并发后出现了反超。
(5)oltp_insert
下图是 4.0.13 版本 50 并发测试写入的监控。
process-info.png
下图是 7.5.5 版本 50 并发测试写入的监控。
process-info.png
在 50 并发的只写场景下7.5.5
的 QPS 比4.0.13
高31.05%
左右。
下图是 4.0.13 版本 100 并发测试写入的监控。
process-info.png
下图是 7.5.5 版本 100 并发测试写入的监控。
process-info.png
在 100 并发的只写场景下7.5.5
的 QPS 比4.0.13
高31.67%
左右。
下图是 4.0.13 版本 200 并发测试写入的监控。
process-info.png
下图是 7.5.5 版本 200 并发测试写入的监控。
process-info.png
在 200 并发的只写场景下7.5.5
的 QPS 比4.0.13
高23.6%
左右。
可以发现7.5.5
版本更胜一筹,但是随着并发数的增加,4.0.13
与7.5.5
的差距越来越小。
三、监控情况
1、prepare 阶段
(1)prepare 阶段总共耗时
创建 32 张表,每张表 1000w 数据量,各版本耗时分别如下。
(2)prepare 阶段集群 Duration 监控
process-info.png
process-info.png
(3)prepare 阶段集群 Transaction Duration 监控
process-info.png
process-info.png
(4)prepare 阶段 tikv CPU 监控
process-info.png
process-info.png
(5)prepare 阶段 tikv IO Util 监控
process-info.png
process-info.png
(6)prepare 阶段 tikv IOPS 监控
process-info.png
没有合并的图形,其他两个节点的 iops 也差不多这个监控走势。
process-info.png
(7)prepare 阶段 tikv 内存监控
process-info.png
process-info.png
(8)prepare 阶段 tidb 节点的内存监控
process-info.png
process-info.png
(9)prepare 完成后集群大小
process-info.png
process-info.png
2、run 阶段
(1)run 阶段集群 Duration 监控
process-info.png
process-info.png
(3)run 阶段集群 Transaction Duration 监控
process-info.png
process-info.png
(4)run 阶段 tikv CPU 监控
process-info.png
process-info.png
(5)run 阶段 tikv IO Util 监控
process-info.png
process-info.png
(6)run 阶段 tikv IOPS 监控
process-info.png
没有合并的图形,其他两个节点的 iops 也差不多这个监控走势。
process-info.png
(7)run 阶段 tikv 内存监控
process-info.png
process-info.png
(8)run 阶段 tidb 内存监控
process-info.png
process-info.png
(9)run 阶段 QPS/TPS 监控
process-info.png
process-info.png
四、总结
从测试结果来看,oltp_point_select
、oltp_update_non_index
两个场景下4.0.13
更胜一筹,oltp_read_write
、oltp_insert
两个场景下7.5.5
更胜一筹,oltp_update_index
场景则是在50 100
两个并发更胜一筹,在200
并发下,7.5.5
反超。
并发高于200
的场景,7.5.5 的成绩可能会更好,但是感觉意义不是很大,正常各业务不太可能有那么高的并发数,200
并发应该能覆盖90%
的业务了。
从结果看,7.5.5
版本在压测期间CPU 内存
的使用情况都比4.0.13
更高,而QPS TPS
并没有比4.0.13
更好,甚至有些场景不如4.0.13
,所以似乎并没有被惊艳到。
对这个测试结果有些意外,不太相信新版本的成绩是这样的不堪,不知道是这个测试流程有问题还是有什么细节没注意到。当然基准测试跟业务的实际流量还是有差别的,业务实际流量更像是混合读写的场景,在该场景下,7.5.5
还是略强一些的,但也仅仅是略胜一筹而已。
另外值得一提的是,7.5.5
的压缩比应该是强于4.0.13
,相同数据量的情况下,前者磁盘占比大概是后者的65%
左右。
如果想升级新版本的小伙伴建议还是慎重一些,按需升级,如果是旧版本没有遇到什么问题还是不建议轻易尝试升级吧。
比如7.5.5
版本大表加索引可能会遇到意想不到的问题。 https://tidb.net/blog/b2ddded3
以上仅供参考。
评论