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

原创
2023/12/12 00:00
阅读数 16

作者: 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时会出现如下报错:
drv\_mysql.c:37:19: fatal error: mysql.h: No such file or directory

\#include \<mysql.h>

\# ./autogen.sh

\# ./configure --prefix=/usr/local/sysbench --with-mysql 

\# make -j

\# make install

\# ls /usr/local/sysbench/

bin  share

\# /usr/local/sysbench/bin/sysbench --version

sysbench 1.0.20
  • 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

结果截图

image.png

然后压生产和预发,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

结果截图

image.png

最后本来想再压下生产和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

结果截图

image.png

结论

本来觉得在低配置,低数据量的情况下,tidb并不比mysql占优的,实际出乎我的想象。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部