MySQL 5.7 vs 8.0碟狞,哪個性能更牛啄枕?網友吵開了鍋!

  • 背景

  • 前提

  • 環(huán)境

  • 測試

  • 雙1模式下

  • 0 2 模式下

  • 結論

背景

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

前提

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

  • sysbench測試前先重啟mysql服務脆淹,并清空os的cache(避免多次測試時命中緩存)

  • 每次進行測試都是新生成測試數據后再進行mysql5.7和mysql8.0的測試

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

  • 整理了一份328頁MySQLPDF文檔

環(huán)境

機器 cat /etc/redhat-release | xargs echo '版本 ' && dmidecode -s system-product-name | xargs echo '是否虛擬化 ' && cat /proc/cpuinfo |grep "processor"|wc -l | xargs echo 'cpu核數 ' 版本 CentOS Linux release 7.5.1804 (Core) 是否虛擬化 KVM cpu核數 4

myql5.7.22

5.7.22-log
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

mysql8.0.15

8.0.15
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

sysbench

sysbench -V
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

測試

  • 在不同的持久化策略下(binlog, redo log持久化)mysql5.7和mysql8.0 在讀寫模式智润、只讀模式、只寫模式(oltp_read_write未辆,oltp_read_only窟绷,oltp_write_only)下的性能表現

  • sysbench 測試時間為60s,測試的表數量為20

  • 測試分別在雙1模式(安全性)和0 2模式(高性能)下進行

image

雙1模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('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 在讀寫模式下的表現

image
  • 雙1 配置咐柜,讀寫模式下兼蜈,mysql5.7.22 和mysql8.0.15 tps 攘残、qps 性能差不多,mysql8.0.15 在120 線程并發(fā)時为狸,性能出現了下降抖動

mysql5.7和mysql8.0 在只讀模式下的表現

image
  • 雙1 配置歼郭,只讀模式下,mysql5.7.22 的tps辐棒、qps比mysql8.0.15 好1/3 左右病曾;并發(fā)線程數增加后,tps漾根、qps并沒有隨著增加泰涂,反而出現了下降的趨勢

mysql5.7和mysql8.0 在只寫模式下的表現

image
  • 雙1 配置,只寫模式下辐怕,隨著并發(fā)數的上升逼蒙,mysql5.7.22 的性能比mysql8.0.15 好1/4左右

0 2 模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('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 在讀寫模式下的表現

image
  • 0 2配置,讀寫模式下寄疏,并發(fā)數低時是牢,mysql5.7.22性能好于mysql8.0.15; 并發(fā)數比較高時,mysql8.0.15 性能好于mysql5.7.22陕截;在80 線程的并發(fā)以上時驳棱,性能開始下降

mysql5.7和mysql8.0 在只讀模式下的表現

image
  • 0 2配置,只讀模式下农曲,mysql5.7.22性能比mysql8.0.15 好1/3左右社搅;隨著并發(fā)數的上升,性能也沒有上升朋蔫,反而有下降的趨勢

mysql5.7和mysql8.0 在只寫模式下的表現

image
  • 0 2 配置罚渐,只寫模式下,mysql5.7.22的tps 抖動比較大驯妄;mysql5.7.22 的qps比mysql8.0.15好1/3左右

結論

  • 整體來看荷并,mysql5.7.22在讀寫模式、只讀模式青扔、只寫模式下的表現是優(yōu)于mysql8.0.15的

  • 隨著并行數的增加源织,性能表現不會也跟著增加,還會出現下降

  • 本次測試結果是在配置很低的情況下進行的微猖,不代表絕對

注意 sysbench 需要設置--db-ps-mode=disable 禁用預編譯語句谈息,不然并發(fā)測試線程多時會報下面的錯誤 FATAL: mysql_stmt_prepare() failed FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)" 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' function failed: /usr/local/share/sysbench/oltp_common.lua:288: 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' function failed: /usr/local/share/sysbench/oltp_common.lua:288: SQL API error FATAL: mysql_stmt_prepare() failed

整理了一份328頁MySQLPDF文檔

使用腳本

 cat sysbench_test_mysql5.7_8.0_tps_qps.sh
#!/bin/bash
#用于sysbench 測試在讀寫模式、只讀模式凛剥、只寫模式下 mysql5.7和mysql8.0 的tps,qps
#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="$*"
        echo -e "$(date +%F-%T) \e[1;31m ${what} \e[0m"
}

function check_las_comm(){
    if [ $1 -ne 0 ];then
        red_echo $2
        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<<EOF
purge binary logs before now();
EOF
}

function clean_os_cache(){
  echo 3 > /proc/sys/vm/drop_caches
}

function  sysbench_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

}

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_las_comm  "$?" "restart mysqld${port} failed "
      clean_os_cache
      purge_binlog "$port"

      red_echo "sysbench $thread_num  threads cleanup mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "cleanup" "$test_mode">/dev/null

      red_echo "sysbench $thread_num  threads prepare mysqld${port}"
      sysbench_with_diff_thread "$thread_num" "$port" "prepare" "$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" "run" "$test_mode" > $sysbench_test_info_path/${test_mode}_${thread_num}_$port

      # service mysqld{port} stop
    done
  done
done

}

main
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末侠仇,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌逻炊,老刑警劉巖互亮,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異余素,居然都是意外死亡豹休,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門桨吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來威根,“玉大人,你說我怎么就攤上這事视乐÷宀螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵炊林,是天一觀的道長姥卢。 經常有香客問我卷要,道長渣聚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任僧叉,我火速辦了婚禮奕枝,結果婚禮上,老公的妹妹穿的比我還像新娘瓶堕。我一直安慰自己隘道,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布郎笆。 她就那樣靜靜地躺著谭梗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛蚓。 梳的紋絲不亂的頭發(fā)上激捏,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音凄吏,去河邊找鬼远舅。 笑死,一個胖子當著我的面吹牛痕钢,可吹牛的內容都是我干的图柏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼任连,長吁一口氣:“原來是場噩夢啊……” “哼蚤吹!你這毒婦竟也來了?” 一聲冷哼從身側響起随抠,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤裁着,失蹤者是張志新(化名)和其女友劉穎余佃,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體跨算,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡爆土,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了诸蚕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片步势。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖背犯,靈堂內的尸體忽然破棺而出坏瘩,到底是詐尸還是另有隱情,我是刑警寧澤漠魏,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布倔矾,位于F島的核電站,受9級特大地震影響柱锹,放射性物質發(fā)生泄漏哪自。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一禁熏、第九天 我趴在偏房一處隱蔽的房頂上張望壤巷。 院中可真熱鬧,春花似錦瞧毙、人聲如沸胧华。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矩动。三九已至,卻和暖如春释漆,著一層夾襖步出監(jiān)牢的瞬間悲没,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工灵汪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留檀训,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓享言,卻偏偏與公主長得像峻凫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子览露,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 背景 測試mysql5.7和mysql8.0 分別在讀寫堰乔、只讀、只寫模式下不同并發(fā)時的性能(tps脐恩,qps)[ht...
    樂學小樂閱讀 1,215評論 0 0
  • 前言:全文中一共有常用的(事實上你如果花1-2周閱讀镐侯、理解、自己動手設一下后是需要這么多參數的)76個參數驶冒,筆者把...
    Java碼農石頭閱讀 1,278評論 0 1
  • 推薦指數: 6.0 書籍主旨關鍵詞:特權苟翻、焦點、注意力骗污、語言聯想崇猫、情景聯想 觀點: 1.統(tǒng)計學現在叫數據分析,社會...
    Jenaral閱讀 5,716評論 0 5
  • 昨天需忿,在回家的路上诅炉,坐在車里悠哉悠哉地看著三毛的《撒哈拉沙漠的故事》,我被里面的內容深深吸引住了屋厘,盡管上學時...
    夜闌曉語閱讀 3,784評論 2 9
  • 一涕烧。匹配。 判斷一個字符串是否符合我們制定的規(guī)則擅这? 二…捕獲 字符串中符合我們正則表達式澈魄,規(guī)則的景鼠,內容捕獲到仲翎。 三...
    時修七年閱讀 976評論 2 0