MySQL和MariaDB单实例压测对比
2021/12/25 2:07:53
本文主要是介绍MySQL和MariaDB单实例压测对比,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
根据 MariaDB 官网的文章 https://mariadb.com/resources/blog/benchmark-mariadb-vs-mysql-on-commodity-cloud-hardware/ 修改而来。
本次压测使用默认的 docker 容器,未经任何配置。
先将本次使用的压测脚本放出来:
#!/bin/bash # set -eux is_exists=0 command -v sysbench >/dev/null 2>&1 || { is_exists=1; } if [ $is_exists -ne 0 ]; then echo 'sysbench 命令不存在,安装 sysbench' source /etc/os-release if [ $ID == 'arch' ]; then sudo pacman -Syy sudo pacman -S sysbench --noconfirm elif [ $ID == 'ubuntu' || $ID == 'debian' ]; then sudo apt update sudo apt install -y sysbench else echo '未知发行版' exit 1 fi echo 'sysbench 已安装' fi # 输入认证信息 # read -p 'MySQL host: ' mysql_host # read -p 'MySQL port: ' mysql_port # read -p 'MariaDB host: ' mariadb_host # read -p 'MariaDB port: ' mariadb_port # read -p 'user: ' user # read -p 'password: ' password # 认证信息输入完毕 mysql_ctn='mysql_bench' mariadb_ctn='mariadb_bench' mysql_port=33061 mariadb_port=33062 password=123456 # 测试前删除重名测试容器 docker rm $mysql_ctn -f docker rm $mariadb_ctn -f # 创建 bench 容器 docker run -itd --name $mysql_ctn -p $mysql_port:3306 -e MYSQL_ROOT_PASSWORD=$password mysql docker run -itd --name $mariadb_ctn -p $mariadb_port:3306 -e MARIADB_ROOT_PASSWORD=$password mariadb host=172.17.0.1 # 创建后休息 10 秒等容器完全启动 sleep 10 echo '创建 bench 数据库' docker exec -it $mysql_ctn mysql -uroot -p$password -e 'CREATE DATABASE sysbench' docker exec -it $mariadb_ctn mariadb -uroot -p$password -e 'CREATE DATABASE sysbench' echo '数据库已创建' echo '准备数据' sysbench oltp_read_write --mysql-host=$host --mysql-port=$mysql_port --mysql-user=root --mysql-password=$password --mysql-db=sysbench --table-size=1000000 --tables=10 --threads=16 --auto-inc=off --secondary=off --create_secondary=off prepare sleep 3 sysbench oltp_read_write --mysql-host=$host --mysql-port=$mariadb_port --mysql-user=root --mysql-password=$password --mysql-db=sysbench --table-size=1000000 --tables=10 --threads=16 --auto-inc=off --secondary=off --create_secondary=off prepare # 压测 BASEDIR="$HOME/sysbench" if [ ! -d $BASEDIR ]; then mkdir -p $BASEDIR fi cd $BASEDIR rm -rf $BASEDIR/logs* exec 3>&1 4>&2 1>> sysbench.log 2>&1 # 8, 16, 32, 64, 128 THERAD_NUMBER="8 64 128" round=0 # 跑 10 轮测试 while [ $round -le 10 ]; do round_dir=$BASEDIR/logs-${round} mkdir -p ${round_dir} for thread in `echo "${THERAD_NUMBER}"`; do sysbench oltp_read_write --point-selects=9 --range-selects=false --index-updates=0 --non-index-updates=1 --delete-inserts=0 --time=300 --tables=10 --table-size=1000000 --rand-type=uniform --report-interval=10 --mysql-db=sysbench --mysql-host=$host --mysql-port=$mysql_port --mysql-user=root --mysql-password=$password --threads=$thread --rand-seed=12341 run >> ${round_dir}/sysbench_mysql_${thread}.log sysbench oltp_read_write --point-selects=9 --range-selects=false --index-updates=0 --non-index-updates=1 --delete-inserts=0 --time=300 --tables=10 --table-size=1000000 --rand-type=uniform --report-interval=10 --mysql-db=sysbench --mysql-host=$host --mysql-port=$mariadb_port --mysql-user=root --mysql-password=$password --threads=$thread --rand-seed=12341 run >> ${round_dir}/sysbench_mariadb_${thread}.log # 不同线程之间休息 5 分钟 sleep 300 done round=`expr $round + 1` # 每轮压缩之间停顿 5 分钟 sleep 300 done # 删除测试容器 docker rm $mysql_ctn -f docker rm $mariadb_ctn -f
下面是本次压测用到的 MySQL 和 MariaDB 版本信息:
mariadb Ver 15.1 Distrib 10.6.5-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 mysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)
下面是本机配置信息:
OS: Arch Linux x86_64 Kernel: 5.15.10-arch1-1 CPU: Intel i7-9700 (8) @ 4.700GHz Memory: 6378MiB / 15662MiB
准备数据(命令已包含在上面的脚本中):
sysbench oltp_read_write --mysql-host=localhost --mysql-user=root --mysql-password=123456 --mysql-db=sysbench --table-size=1000000 --tables=10 --threads=10 --auto-inc=off --secondary=off --create_secondary=off prepare
压测(命令已包含在上面的脚本中):
sysbench oltp_read_write --point-selects=9 --range-selects=false --index-updates=0 --non-index-updates=1 --delete-inserts=0 --time=300 --tables=10 --table-size=1000000 --rand-type=uniform --report-interval=10 --mysql-db=sysbench --mysql-host=localhost --mysql-user=root --mysql-password=123456 --threads=16 --rand-seed=12341 run
100W 条数据分别以 8、64、128 线程压测 10 轮,得到的结果有些出人意料,我并没有看到网上所传的 MariaDB 性能比 MySQL 高,不论是 TPS 还是延迟,MySQL 都辗压 MariaDB。
当然,受于硬件限制,本次压测与官网中的压测条件不能相提并论,TPS 很难达到官网中的那么高。
各线程 10 轮 TPS 结果
10 轮最终结果的 TPS 和延迟汇总
结论
从上面的图表能够看出来,MySQL 辗压 MariaDB 没毛病吧?
我还是老老实实地用 MySQL 吧。
这篇关于MySQL和MariaDB单实例压测对比的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程