通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想象。
作者: tidb 菜鸟一只原文来源:https://tidb.net/blog/db9b4a9d
背景
最近要上一个新项目,原来提供的是一个主从 mysql 数据库,两台 16C64G 的主机(还有个预发环境也是 mysql 主从,2 个 4C8G 主机),感觉不是很靠谱,所以想要切换成 tidb,所以对两边进行了压测 (包括预发),两边磁盘都是垃圾机械盘,性能不说了,但是两边都垃圾,对比数据还是比较靠谱的。
实践过程
下载
通过 https://github.com/akopytov/sysbench/releases 下载源码
CentOS7.9 下安装 sysbench 版本 1.0.20, 支持 MySQL
yum -y install make automake libtool pkgconfig libaio-devel
如果本身 openssl 版本高,安装 mariadb-devel 报错
直接下载新版的 mariadb 来安装
不安装 MySQL 和 MySQL Dev 包,make 时会出现如下报错:
tidb 需要 set global tidb_disable_txn_auto_retry = off;
set global tidb\_prepared\_plan\_cache\_size=1000;
mysql 需要 set global max_prepared_stmt_count=1048576;
其他全部用默认参数,不做修改。
调整
调整 Sysbench 脚本创建索引的顺序。Sysbench 按照“建表 -> 插入数据 -> 创建索引”的顺序导入数据。对于 TiDB 而言,该方式会花费更多的导入时间。你可以通过调整顺序来加速数据的导入。
假设使用的 Sysbench 版本为 1.0.20,可以通过以下两种方式来修改:
直接下载为 TiDB 修改好的 oltp_common.lua 文件,覆盖 /usr/local/sysbench/share/sysbench/oltp_common.lua 文件。
将 /usr/local/sysbench/share/sysbench/oltp_common.lua 的第 235-240 行移动到第 198 行以后。
分别配置 mysql 和 tidb 的配置文件
测试过程
首先压预发和 tidb,只压 4 张表每张 10W 数据,准备数据
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=4 --table-size=100000 prepare
数据预热与统计信息收集
数据预热可将磁盘中的数据载入内存的 block cache 中,预热后的数据对系统整体的性能有较大的改善,建议在每次重启集群后进行一次数据预热。
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=4 --table-size=100000 prewarm
Point select 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=4 --table-size=100000 --db-ps-mode=auto --rand-type=uniform run
Update index 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_update_index --tables=4--table-size=100000 --db-ps-mode=auto --rand-type=uniform run
Read Write 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=4--table-size=100000 --db-ps-mode=auto --rand-type=uniform run
Read-only 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_only --tables=4--table-size=100000 --db-ps-mode=auto --rand-type=uniform run
清理
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=4--table-size=100000 --db-ps-mode=auto --rand-type=uniform cleanup
结果截图
然后压生产和预发,16 张表每张 50W 数据,准备数据
/usr/local/sysbench/bin/sysbench --config-file=config oltp\_point\_select --tables=16 --table-size=500000 prepare
数据预热与统计信息收集
数据预热可将磁盘中的数据载入内存的 block cache 中,预热后的数据对系统整体的性能有较大的改善,建议在每次重启集群后进行一次数据预热。
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=16 --table-size=500000 prewarm
Point select 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=16 --table-size=500000 --db-ps-mode=auto --rand-type=uniform run
Update index 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_update_index --tables=16--table-size=500000 --db-ps-mode=auto --rand-type=uniform run
Read Write 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=16--table-size=500000 --db-ps-mode=auto --rand-type=uniform run
Read-only 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_only --tables=16--table-size=500000 --db-ps-mode=auto --rand-type=uniform run
清理
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=16--table-size=500000 --db-ps-mode=auto --rand-type=uniform cleanup
结果截图
最后本来想再压下生产和 tidb 的,但是由于生产在用,就没压了,只是单压 tidb,看看数据量级上来之后 tidb 的性能如何。
16 张表每张 1000W 数据,准备数据
/usr/local/sysbench/bin/sysbench –config-file=config oltp_point_select –tables=16 –table-size=10000000 prepare
数据预热与统计信息收集
数据预热可将磁盘中的数据载入内存的 block cache 中,预热后的数据对系统整体的性能有较大的改善,建议在每次重启集群后进行一次数据预热。
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=16 --table-size=10000000 prewarm
Point select 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_point_select --tables=16 --table-size=10000000 --db-ps-mode=auto --rand-type=uniform run
Update index 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_update_index --tables=16--table-size=10000000 --db-ps-mode=auto --rand-type=uniform run
Read Write 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=16--table-size=10000000 --db-ps-mode=auto --rand-type=uniform run
Read-only 测试命令
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_only --tables=16--table-size=10000000 --db-ps-mode=auto --rand-type=uniform run
清理
/usr/local/sysbench/bin/sysbench --config-file=config oltp_read_write --tables=16--table-size=10000000 --db-ps-mode=auto --rand-type=uniform cleanup
结果截图
结论
本来觉得在低配置,低数据量的情况下,tidb 并不比 mysql 占优的,实际出乎我的想象。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/11444b8200afa1e85f1c2cdf4】。文章转载请联系作者。
评论