写点什么

通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想象。

  • 2023-12-15
    北京
  • 本文字数:3145 字

    阅读完需:约 10 分钟

作者: tidb 菜鸟一只原文来源:https://tidb.net/blog/db9b4a9d

背景

最近要上一个新项目,原来提供的是一个主从 mysql 数据库,两台 16C64G 的主机(还有个预发环境也是 mysql 主从,2 个 4C8G 主机),感觉不是很靠谱,所以想要切换成 tidb,所以对两边进行了压测 (包括预发),两边磁盘都是垃圾机械盘,性能不说了,但是两边都垃圾,对比数据还是比较靠谱的。

实践过程

下载

通过 https://github.com/akopytov/sysbench/releases 下载源码



\# ls -lh sysbench-1.0.20.tar.gz
\-rw-r--r-- 1 root root 1.5M Apr 27 17:12 sysbench-1.0.20.tar.gz
\# tar -zxf sysbench-1.0.20.tar.gz
\# ls sysbench-1.0.20
autogen.sh COPYING m4 README.md scripts third\_party
ChangeLog debian Makefile.am README-Oracle.md snap
config doc missing README-WIN.txt src
configure.ac install-sh mkinstalldirs rpm tests
复制代码


  • CentOS7.9 下安装 sysbench 版本 1.0.20, 支持 MySQL


yum -y install make automake libtool pkgconfig libaio-devel


  • 如果本身 openssl 版本高,安装 mariadb-devel 报错


  • 直接下载新版的 mariadb 来安装


Judy-1.0.5-8.el7.x86\_64.rpm
thrift-0.9.1-15.el7.x86\_64.rpm
mariadb-10.4.32-rhel-7-x86\_64-rpms.tar
rpm -e mariadb-libs-5.5.68-1.el7.x86\_64 --nodeps
rpm -e mariadb-5.5.68-1.el7.x86\_64 --nodeps
rpm -ivh Judy-1.0.5-8.el7.x86\_64.rpm
rpm -ivh thrift-0.9.1-15.el7.x86\_64.rpm
tar -xvf mariadb-10.4.32-rhel-7-x86\_64-rpms.tar
cd mariadb-10.4.32-rhel-7-x86\_64-rpms
yum localinstall \*.rpm -y
cd sysbench-1.0.20
\# yum install mariadb mariadb-devel
复制代码


  • 不安装 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,可以通过以下两种方式来修改:


  1. 直接下载为 TiDB 修改好的 oltp_common.lua 文件,覆盖 /usr/local/sysbench/share/sysbench/oltp_common.lua 文件。


  1. 将 /usr/local/sysbench/share/sysbench/oltp_common.lua 的第 235-240 行移动到第 198 行以后。


分别配置 mysql 和 tidb 的配置文件


vi config
mysql-host=\*.\*.\*.\*
mysql-port=3806
mysql-user=root
mysql-password=\*\*\*\*\*\*
mysql-db=sbtest
time=600
threads=100
report-interval=10
db-driver=mysql
复制代码

测试过程

首先压预发和 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 占优的,实际出乎我的想象。


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想象。_版本测评_TiDB 社区干货传送门_InfoQ写作社区