RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL 5.7與MySQL 8.0 性能對比

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:數(shù)據(jù)分析與開發(fā) ? 2020-11-03 09:26 ? 次閱讀

背景

測試mysql5.7和mysql8.0分別在讀寫,選定,只寫模式下不同并發(fā)時的性能(tps,qps)

最早

測試使用版本為mysql5.7.22和mysql8.0.15

sysbench測試前先重啟mysql服務(wù),并清除os的緩存(避免多次測試時命中緩存)

每次進(jìn)行測試都是新生成測試數(shù)據(jù)后再進(jìn)行mysql5.7和mysql8.0的測試

每次測試時保證mysql5.7和mysql8.0的配置參數(shù)一致

環(huán)境

機器cat / etc / redhat-release |xargs echo'版本'&& dmidecode -s系統(tǒng)產(chǎn)品名稱|xargs echo'是否虛擬化'&& cat / proc / cpuinfo | grep“ processor” | wc -l |xargs echo'cpu核數(shù)'版本CentOS Linux版本7.5.1804(核心)是否虛擬化KVM cpu核數(shù)4

myql5.7.22

5.7.22-log innodb_buffer_pool_size128M innodb_log_buffer_size64M innodb_log_file_size48M binlog_formatROW log_binON transaction_isolationREPEATABLE-READ

mysql8.0.15

8.0.15 innodb_buffer_pool_size128M innodb_log_buffer_size64M innodb_log_file_size48M binlog_formatROW log_binON transaction_isolationREPEATABLE-READ

系統(tǒng)平臺

sysbench-V sysbench1.1.0(usingbundledLuaJIT2.1.0-beta3)

測試

在不同的持久化策略下(binlog,重做日志持久化)mysql5.7和mysql8.0在讀寫模式,引用模式,只寫模式(oltp_read_write,oltp_read_only,oltp_write_only)下的性能表現(xiàn)

sysbench測試時間為60s,測試的表數(shù)量為20

測試分別在雙1模式(安全性)和0 2模式(高級)下進(jìn)行

參數(shù) 任選值 意味著
sync_binlog 0 binlog刷盤持久化由操作系統(tǒng)完成,性能好,存在丟失binlog的風(fēng)險
sync_binlog 1個 事務(wù)提交后刷盤持久化,最安全
sync_binlog ? 在每N個事務(wù)提交后進(jìn)行刷盤持久化
innodb_flush_log_at_trx_commit 0 每秒鐘寫redo log并刷盤持久化
innodb_flush_log_at_trx_commit 1個 事務(wù)提交后寫redo log并刷盤持久化,最安全
innodb_flush_log_at_trx_commit 2 事務(wù)提交后寫redo log,兩次刷盤持久化

雙1模式下

SHOWGLOBALVARIABLESWHEREVariable_nameIN('sync_binlog','innodb_flush_log_at_trx_commit'); +--------------------------------+-------+ |Variable_name|Value| +--------------------------------+-------+ |innodb_flush_log_at_trx_commit|1| |sync_binlog|1| +--------------------------------+-------+

mysql5.7和mysql8.0在讀寫模式下的表現(xiàn)

雙1配置,讀寫模式下,mysql5.7.22和mysql8.0.15 tps,qps性能差不多,mysql8.0.15在120線程并發(fā)時,性能出現(xiàn)了下降幅度

mysql5.7和mysql8.0在預(yù)期模式下的表現(xiàn)

雙1配置,預(yù)期模式下,mysql5.7.22的tps,qps比mysql8.0.15好1/3左右;并發(fā)線程數(shù)增加后,tps,qps并沒有增加,反而出現(xiàn)了下降的趨勢

mysql5.7和mysql8.0在只寫模式下的表現(xiàn)

雙1配置,只寫模式下,轉(zhuǎn)換并發(fā)數(shù)的上升,mysql5.7.22的性能比mysql8.0.15好1/4左右

0 2模式下

SHOWGLOBALVARIABLESWHEREVariable_nameIN('sync_binlog','innodb_flush_log_at_trx_commit'); +--------------------------------+-------+ |Variable_name|Value| +--------------------------------+-------+ |innodb_flush_log_at_trx_commit|2| |sync_binlog|0| +--------------------------------+-------+

mysql5.7和mysql8.0在讀寫模式下的表現(xiàn)

0 2配置,讀寫模式下,并發(fā)數(shù)低時,mysql5.7.22性能好于mysql8.0.15;并發(fā)數(shù)比較高時,mysql8.0.15性能好于mysql5.7.22;在80線程的并發(fā)以上時,性能開始下降

mysql5.7和mysql8.0在預(yù)期模式下的表現(xiàn)

0 2配置,預(yù)期模式下,mysql5.7.22性能比mysql8.0.15好1/3左右;轉(zhuǎn)換并發(fā)數(shù)的上升,性能也沒有上升,反而有下降的趨勢

mysql5.7和mysql8.0在只寫模式下的表現(xiàn)

0 2配置,只寫模式下,mysql5.7.22的tps頂點比較大;mysql5.7.22的qps比mysql8.0.15好1/3左右

摘要

整體來看,mysql5.7.22在讀寫模式,擴展模式,只寫模式下的表現(xiàn)是mysql8.0.15的

隨著并行數(shù)的增加,性能表現(xiàn)不會也跟著增加,將會出現(xiàn)下降

本次測試結(jié)果是在配置很低的情況下進(jìn)行的,不代表絕對

注意sysbench需要設(shè)置--db-ps-mode = disable禁用預(yù)編譯語句,不然并發(fā)測試線程多時會報下面的錯誤。致命:mysql_stmt_prepare()失敗致命:MySQL錯誤:1461“不能創(chuàng)建超過max_prepared_stmt_count語句(當(dāng)前值:16382)“致命:mysql_stmt_prepare()失敗致命:MySQL錯誤:1461”不能創(chuàng)建超過max_prepared_stmt_count語句(當(dāng)前值:16382)“致命:thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua SQL API error FATAL: mysql_stmt_prepare() failed FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)" FATAL:thread_init'函數(shù)失?。? usr / local / share / sysbench / oltp_common.lua:288:SQL API錯誤致命:mysql_stmt_prepare()失敗

使用腳本

catsysbench_test_mysql5.7_8.0_tps_qps.sh #!/bin/bash #用于sysbench測試在讀寫模式、只讀模式、只寫模式下mysql5.7和mysql8.0的tps,qps #nohupbash$0>/tmp/sysbench_test2>&1& # user=admin passwd=admin ports="801557222" host=127.0.0.1 sysbench_test_mode="oltp_read_writeoltp_read_onlyoltp_write_only" sysbench_test_info_path=/tmp/sysbench-test functionred_echo(){ localwhat="$*" echo-e"$(date+%F-%T)e[1;31m${what}e[0m" } functioncheck_las_comm(){ if[$1-ne0];then red_echo$2 exit1 fi } functionrestart_mysqld(){ servicemysqld${1}restart sleep2 } functionpurge_binlog(){ port=$1 mysql-u$user-p$passwd-P$port-h$host</proc/sys/vm/drop_caches } functionsysbench_with_diff_thread(){ thread_num=$1 port=$2 order=$3 test_mode=$4 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 } functionmain(){ fortest_modein$sysbench_test_mode;do forportin$ports;do forthread_numin{5,10,20,30,40,80,120,200};do restart_mysqld"$port" check_las_comm"$?""restartmysqld${port}failed" clean_os_cache purge_binlog"$port" red_echo"sysbench$thread_numthreadscleanupmysqld${port}" sysbench_with_diff_thread"$thread_num""$port""cleanup""$test_mode">/dev/null red_echo"sysbench$thread_numthreadspreparemysqld${port}" sysbench_with_diff_thread"$thread_num""$port""prepare""$test_mode">/dev/null mkdir-p$sysbench_test_info_path red_echo"sysbench$thread_numthreadsrunmysqld${port}$test_mode" sysbench_with_diff_thread"$thread_num""$port""run""$test_mode">$sysbench_test_info_path/${test_mode}_${thread_num}_$port #servicemysqld{port}stop done done done } main

責(zé)任編輯:xj

原文標(biāo)題:MySQL 5.7 & MySQL 8.0 性能對比

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    804

    瀏覽量

    26526
  • MYSQL數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    9389

原文標(biāo)題:MySQL 5.7 & MySQL 8.0 性能對比

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    MySQL還能跟上PostgreSQL的步伐嗎

    Percona 的老板 Peter Zaitsev最近發(fā)表一篇博客,討論了MySQL是否還能跟上PostgreSQL的腳步。Percona 作為MySQL 生態(tài)扛旗者,Percona 開發(fā)了知名
    的頭像 發(fā)表于 11-18 10:16 ?195次閱讀
    <b class='flag-5'>MySQL</b>還能跟上PostgreSQL的步伐嗎

    詳解MySQL多實例部署

    詳解MySQL多實例部署
    的頭像 發(fā)表于 11-11 11:10 ?223次閱讀

    MySQL編碼機制原理

    前言 一位讀者在本地部署 MySQL 測試環(huán)境時碰到一個問題,我覺得挺有代表性的,所以寫篇文章介紹一下,看完相信你會對 MySQL 的編碼機制有最本質(zhì)的了解,本文的目錄結(jié)構(gòu)如下 讀者問題簡介
    的頭像 發(fā)表于 11-09 11:01 ?219次閱讀

    適用于MySQL的dbForge架構(gòu)比較

    dbForge Schema Compare for MySQL 是一種工具,用于輕松有效地比較和部署 MySQL 數(shù)據(jù)庫結(jié)構(gòu)和腳本文件夾差異。該工具提供了 MySQL 數(shù)據(jù)庫架構(gòu)中所有差異的全面視圖。
    的頭像 發(fā)表于 10-28 09:41 ?191次閱讀
    適用于<b class='flag-5'>MySQL</b>的dbForge架構(gòu)比較

    配置MySQL主從復(fù)制和讀寫分離

    配置MySQL主從復(fù)制和讀寫分離
    的頭像 發(fā)表于 10-23 11:44 ?407次閱讀
    配置<b class='flag-5'>MySQL</b>主從復(fù)制和讀寫分離

    Jtti:MySQL初始化操作如何設(shè)置root密碼

    MySQL初始化時,可以通過以下步驟設(shè)置root密碼: 打開命令行工具,使用以下命令啟動MySQL服務(wù): ? sudo service mysql start ? 使用以下命令登錄MySQL
    的頭像 發(fā)表于 08-08 16:45 ?360次閱讀

    MySQL知識點匯總

    大家好,這部分被稱為DQL部分,是每個學(xué)習(xí)MySQL必須要學(xué)會的部分,下面就讓我來介紹MySQL中的其他部分。
    的頭像 發(fā)表于 08-05 15:27 ?394次閱讀
    <b class='flag-5'>MySQL</b>知識點匯總

    華納云:如何修改MySQL的默認(rèn)端口

    MySQL是世界上最流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。在某些情況下,由于安全性、網(wǎng)絡(luò)策略或端口沖突的原因,數(shù)據(jù)庫管理員可能需要更改MySQL服務(wù)的默認(rèn)監(jiān)聽端口。本文將指導(dǎo)您如何在不同的操作系統(tǒng)上
    的頭像 發(fā)表于 07-22 14:56 ?305次閱讀
    華納云:如何修改<b class='flag-5'>MySQL</b>的默認(rèn)端口

    MySQL的整體邏輯架構(gòu)

    支持多種存儲引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關(guān)鍵優(yōu)勢之一。如果能夠理解MySQL Server與存儲引擎之間是怎樣通過API交互的,將大大有利于理解MySQL的核心
    的頭像 發(fā)表于 04-30 11:14 ?446次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯架構(gòu)

    MySQL忘記root密碼解決方案

    mysql登錄密碼為password()算法加密,解密成本太高,以下為通用方案; 原理:mysql提供了特殊啟動方式,即跳過權(quán)限表驗證,啟動后,登錄不需要提供密碼; 登錄后,即可修改mysql數(shù)據(jù)庫的user表,重置
    的頭像 發(fā)表于 04-23 16:08 ?691次閱讀

    查詢SQL在mysql內(nèi)部是如何執(zhí)行?

    我們知道在mySQL客戶端,輸入一條查詢SQL,然后看到返回查詢的結(jié)果。這條查詢語句在 MySQL 內(nèi)部到底是如何執(zhí)行的呢?本文跟大家探討一下哈,我們先來看下MySQL基本架構(gòu)~
    的頭像 發(fā)表于 01-22 14:53 ?563次閱讀
    查詢SQL在<b class='flag-5'>mysql</b>內(nèi)部是如何執(zhí)行?

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例!

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例! MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如果你忘記了MySQL的密碼,不必?fù)?dān)心,可以通過一些簡單的步驟來快速重
    的頭像 發(fā)表于 01-12 16:06 ?739次閱讀

    怎么簡單實現(xiàn)由Labview讀取的串口數(shù)據(jù)自增寫入mysql5.7數(shù)據(jù)庫中?

    怎么簡單實現(xiàn)由Labview讀取的串口數(shù)據(jù)自增寫入mysql5.7數(shù)據(jù)庫中? 已實現(xiàn):串口數(shù)據(jù)的接收處理 mysql5.7的安裝(已測試數(shù)據(jù)庫正常運行) 愿付費解決此問題(QQ:84295699)感謝
    發(fā)表于 01-11 22:05

    如何使用Golang連接MySQL

    首先我們來看如何使用Golang連接MySQL
    的頭像 發(fā)表于 01-08 09:42 ?3337次閱讀
    如何使用Golang連接<b class='flag-5'>MySQL</b>

    mysql密碼忘了怎么重置

    mysql密碼忘了怎么重置? MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),密碼用于保護數(shù)據(jù)庫的安全性和保密性。如果你忘記了MySQL的密碼,可以通過以下幾種方法進(jìn)行重置。 方法一:使用MySQ
    的頭像 發(fā)表于 12-27 16:51 ?6664次閱讀
    RM新时代网站-首页