博客
关于我
MySQL 5.7 vs 8.0,哪个性能更牛?
阅读量:796 次
发布时间:2023-03-22

本文共 3617 字,大约阅读时间需要 12 分钟。

测试MySQL 5.7 和 MySQL 8.0 在不同持久化策略下的性能表现

在这个测试中,我们比较了MySQL 5.7.22 和 MySQL 8.0.15 在不同的持久化策略下(binlog 和 redo log 持久化)、在读写模式、预期模式和只写模式下的性能表现。测试使用了 sysbench 工具,并在双1模式(安全性模式)和 0 2模式(高级模式)下进行。

测试环境

  • 系统平台:CentOS Linux 7.5.1804,KVM 虚拟化,4 核 CPU
  • MySQL 配置
    • MySQL 5.7.22 和 MySQL 8.0.15 的配置参数一致
    • innodb_buffer_pool_size = 128M
    • innodb_log_buffer_size = 64M
    • innodb_log_file_size = 48M
    • binlog_format = ROW
    • transaction_isolation = REPEATABLE-READ

测试方法

  • 持久化策略:binlog 和 redo log 持久化
  • 测试模式:oltp_read_write(读写模式)、oltp_read_only(只读模式)、oltp_write_only(只写模式)
  • 并发线程:5, 10, 20, 30, 40, 80, 120, 200
  • 测试时间:60 秒
  • 预编译语句:禁用(避免 sysbench 多线程测试时出现错误)

测试结果

双1模式下

  • 读写模式:MySQL 5.7.22 和 MySQL 8.0.15 的 tps 和 qps 差异不大,但在 120 线程并发时,MySQL 8.0 的性能下降幅度较大。
  • 预期模式:MySQL 5.7.22 的 tps 和 qps 比 MySQL 8.0.15 好 1/3 左右。并发线程增加后,性能并未提升,反而出现下降趋势。
  • 只写模式:MySQL 5.7.22 的性能比 MySQL 8.0.15 好 1/4 左右。

0 2模式下

  • 读写模式:并发数低时,MySQL 5.7.22 性能优于 MySQL 8.0.15;并发数较高时,MySQL 8.0.15 性能更好。80 线程并发以上时,性能开始下降。
  • 预期模式:MySQL 5.7.22 的性能比 MySQL 8.0.15 好 1/3 左右。并发线程增加后,性能趋势不佳。
  • 只写模式:MySQL 5.7.22 的 tps 和 qps 比 MySQL 8.0.15 好 1/3 左右。

总结

整体来看,MySQL 5.7.22 在读写模式、预期模式和只写模式下的性能表现均优于 MySQL 8.0.15。随着并发线程数的增加,性能提升趋势逐渐减弱,甚至出现下降。需要注意的是,本次测试是在配置较低的情况下进行的,结果并不代表绝对情况。

sysbench 测试脚本

以下是用于测试的脚本:

#!/bin/bash
# 该脚本用于 sysbench 测试在读写模式、只读模式、只写模式下 MySQL 5.7 和 MySQL 8.0 的 tps 和 qps
# 使用方式:./sysbench_test_mysql.sh
#!/bin/bash
nohup bash $0 > /tmp/sysbench_test 2>&1 &
user=admin
passwd=admin
ports="8015 57222"
host=127.0.0.1
sysbench_test_mode="oltp_read_write oltp_read_only oltp_write_only"
sysbench_test_info_path=/tmp/sysbench-test
function red_echo() {
local what="$1"
echo -e "$(date +%F-%T) $(tput -T -t 31m ${what} $(tput -T -t 0m))"
}
function check_last_comm() {
if [ $1 -ne 0 ]; then
red_echo "sysbench $2 threads cleanup mysqld${1}"
exit 1
fi
}
function restart_mysqld() {
service mysqld${1} restart
sleep 2
}
function purge_binlog() {
port=$1
mysql -u $user -p$passwd -P$port -h$host < purge_binary_logs_before_now()
}
function clean_os_cache() {
echo 3 > /proc/sys/vm/drop_caches
}
function sysbench_with_diff_thread() {
thread_num=$1
port=$2
test_mode=$3
sysbench /usr/local/share/sysbench/${test_mode}.lua \
--mysql_storage_engine=innodb \
--table-size=100000 \
--tables=20 \
--mysql-db=test_1 \
--mysql-user=$user \
--mysql-password=$passwd \
--mysql-port=$port \
--mysql-host=$host \
--threads=$thread_num \
--time=60 \
--report-interval=2 \
--db-ps-mode=disable \
--events=0 \
--db-driver=mysql \
$order
}
function main() {
for test_mode in $sysbench_test_mode; do
for port in $ports; do
for thread_num in {5,10,20,30,40,80,120,200}; do
restart_mysqld "$port"
check_last_comm "$port" || true
clean_os_cache
purge_binlog "$port"
red_echo "sysbench $thread_num threads cleanup mysqld${port}"
sysbench_with_diff_thread "$thread_num" "$port" "$test_mode"
red_echo "sysbench $thread_num threads prepare mysqld${port}"
sysbench_with_diff_thread "$thread_num" "$port" "$test_mode" > /dev/null
mkdir -p $sysbench_test_info_path
red_echo "sysbench $thread_num threads run mysqld${port} $test_mode"
sysbench_with_diff_thread "$thread_num" "$port" "$test_mode" > $sysbench_test_info_path/${test_mode}_${thread_num}_$port
service mysqld${port} stop
done
done
done
}
main

欢迎加入我的技术交流星球,探讨更多技术话题。

转载地址:http://snqfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现求一个数的位数之和算法(附完整源码)
查看>>
Objective-C实现求一个数的因子算法(附完整源码)
查看>>
Objective-C实现求一组数字的平均值算法(附完整源码)
查看>>
Objective-C实现求两个数组的中位数算法(附完整源码)
查看>>
Objective-C实现求两点间距离(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求众数(附完整源码)
查看>>
Objective-C实现求圆锥的体积(附完整源码)
查看>>
Objective-C实现求曲线在某点的导数(附完整源码)
查看>>
Objective-C实现求最大公约数 (GCD)的算法(附完整源码)
查看>>
Objective-C实现求梯形面积公式(附完整源码)
查看>>
Objective-C实现求模逆算法(附完整源码)
查看>>
Objective-C实现求正弦(附完整源码)
查看>>
Objective-C实现求矩阵对角线元素之和(附完整源码)
查看>>
Objective-C实现汉密尔顿循环算法(附完整源码)
查看>>
Objective-C实现波利比乌斯密码算法(附完整源码)
查看>>
Objective-C实现波雷费密码算法(附完整源码)
查看>>
Objective-C实现洗牌移位密码算法(附完整源码)
查看>>
Objective-C实现测试信用卡号码有效性credit card validator的算法(附完整源码)
查看>>