原創|使用教程|編輯:status|2020-01-13 13:51:16.210|閱讀 3332 次
概述:目前絕大多數網絡應用依然再使用Mysql5.7,不過在隨著應用覆蓋率及應用人群提升,特別是春節等期間等引流活動加持下數據庫都撐不過第一輪高并發的壓力。目前Mysql8.0的升級版瞬間將同等配置下的數據并發閾值提升到400%。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在Mysql8.0發布的4年后,把Mysql5.7升級至Mysql8.0.19已經是必要之舉,截止目前最后一次文件更新是2020年1約12日,關于。
在Mysql8.0發布之后,阿里云和騰訊云等國內云服務供應商紛紛升級云數據庫架構,騰訊云發布了MySQL性能基準測試對比:5.7 VS 8.0 ,以下內容來自于騰訊云社區團隊的實測對比。
在Oracle MySQL團隊的推動下,MySQL 8.0發生了巨大的變化和修改。
物理文件已更改。例如,.frm, .TRG,.TRN和 .par 不再存在。添加了大量的新特性,如通用表表達式(Common Table Expressions CTE),窗口函數(Window Functions),不可見索引( Invisible Indexes),正則表達式(regexp) -MySQL8.0現在已經完全支持Unicode,且具有多字節安全特性。數據字典也發生了變化。它現在與一個事務性數據字典合并,該字典存儲有關數據庫對象的信息。與以前的版本不同,字典數據存儲在元數據文件和非事務表中。
安全性得到了改進,caching_sha2_password認證方式取代了之前的mysql_native_password認證方式,成為默認的身份驗證方式。它提供了更強大的靈活性,而且也加強了安全性,即它要求必須使用安全連接或通過RSA密鑰對實現的支持密碼交換的未加密鏈接。
本次實測中使用了虛擬機,以下為虛擬機的配置參數和Mysql8.0的相關對比。
· 存儲:gp2(SSD存儲,最小100 IOPS,最大16000 IOPS)
· 虛擬CPU:4
· 內存:16GiB
· 系統:centos 7.6
· MySQL5.7版本:MySQLCommunity Server (GPL) 5.7.24
· MySQL8.0版本:MySQLCommunity Server - GPL 8.0.14
在這個基準測試中,我也針對一些參數項的取值進行了配置,它們是:
· innodb_max_dirty_pages_pct= 90 ##這是MySQL 8.0中的默認值。
· innodb_max_dirty_pages_pct_lwm= 10 ##這是MySQL 8.0中的默認值
· innodb_flush_neighbors=0
· innodb_buffer_pool_instances=8
· innodb_buffer_pool_size=8GiB
Commands and Scripts Used使用的命令和腳本 對于此任務,sysbench用于測試和負載模擬這兩個環境。以下測試中使用的命令和腳本:
sb-prepare.sh #!/bin/bash host=$1#host192.168.10.110port=3306user='sysbench'password='MysqP@55w0rd'table_size=500000rate=20ps_mode='disable'sysbench/usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=1--max-requests=0 --time=3600 --mysql-host=$host --mysql-user=$user--mysql-password=$password --mysql-port=$port --tables=10 --report-interval=1--skip-trx=on --table-size=$table_size --rate=$rate --db-ps-mode=$ps_modeprepare
運行sh
#!/usr/bin/envbash2 host=$1port=3306user="sysbench"password="MysqP@55w0rd"table_size=100000tables=10rate=20ps_mode='disable'threads=1events=0time=5trx=100path=$PWD counter=1 echo "thread,cpu" >${host}-cpu.csv for i in 16 32 64 128 256 512 1024 2048; do threads=$i mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logtmpfile=$path/${host}-tmp${threads}touch $tmpfile/bin/bashcpu-checker.sh $tmpfile $host $threads & /usr/share/sysbench/oltp_read_write.lua--db-driver=mysql --events=$events --threads=$threads --time=$time--mysql-host=$host --mysql-user=$user --mysql-password=$password--mysql-port=$port --report-interval=1 --skip-trx=on --tables=$tables--table-size=$table_size --rate=$rate --delete_inserts=$trx --order_ranges=$trx--range_selects=on --range-size=$trx --simple_ranges=$trx --db-ps-mode=$ps_mode--mysql-ignore-errors=all run | tee -a $host-sysbench.log echo"${i},"`cat ${tmpfile} | sort -nr | head -1` >> ${host}-cpu.csvunlink ${tmpfile} mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logdone python $path/innodb-ops-parser.py $host mysql -h $host -e "SHOW GLOBALVARIABLES" >> $host-global-vars.log
因此,腳本只是準備sbtestschema并填充表和記錄。然后,它使用
/usr/share/sysbench/oltp_read_write.lua腳本執行讀/寫負載測試。該腳本轉儲全局狀態和MySQL變量,收集CPU利用率,并解析由腳本innodb-ops-parser.py處理的InnoDB行操作。腳本根據基準測試期間收集的轉儲日志生成* .csv文件,我在這里使用Excel電子表格從* .csv文件生成圖表。請檢查 github中提交的代碼。
現在,讓我們繼續處理圖表結果!
InnoDB行操作
基本上在這里,我只提取了InnoDB行操作,它執行查找(讀取),刪除,插入和更新。當線程數量增加時,MySQL 8.0明顯優于MySQL 5.7!在這兩個版本中都沒有針對配置項進行任何個性化變更,只有我統一配置的參數項。所以這兩個版本中的配置幾乎都使用默認值。
有趣的是,MySQL團隊關于新版本中讀寫性能的聲明,這些圖表指出了性能的顯著提高,特別是在高負載服務器上。想一下MySQL 5.7和MySQL 8.0在InnoDB行操作上的區別,確實存在有很大的不同,特別是當線程數增加的時候。MySQL 8.0表明,無論工作負載如何,它都能高效地運行。
事務處理
如上圖所示,MySQL 8.0的結果趨勢顯示出其處理事務所需的時間的巨大變化。縱軸數值越低,代表性能越好,意味著處理事務的速度更快。處理的事務統計表(第二張表)還顯示出這兩個版本處理事務的數量沒有差異。這意味著,兩個版本處理的事務數量幾乎相同,但它們的完成速度不同。雖然MySQL 5.7在較低的負載下可以大量事務,但是實際的負載,特別是在生產中,可能會更高——尤其是在最繁忙的時期。
上面的圖仍然顯示的是兩個版本能夠處理的事務數量,只是將讀和寫分離開來。然而,圖中實際上是存在異常值,而我沒有將這些值包括在內,因為它們是這一小部分異常結果會扭曲圖形。
MySQL 8.0體現出一個很大的改進,特別是對于讀取。表現在寫操作的效率上,特別是對于高工作負載的服務器。在8.0版本中,影響MySQL讀取性能的重要新增支持是:可以按降序(或正向索引掃描)創建索引的能力。以前的版本只有升序或反向索引掃描,如果需要降序,MySQL必須執行filesort(如果需要filesort,需要檢查max_length_for_sort_data的值)。當最有效的掃描順序混合某些列的升序和其他列的降序時,降序索引還使優化器可以使用多列索引。有關詳細信息,請參見此處。
CPU資源
在此基準測試中,我決定測試一些硬件資源,尤其是CPU利用率。
讓我先解釋一下如何在基準測試中獲取CPU使用率。在對數據庫進行基準測試時,sysbench測試結果中不包括在此過程中使用的硬件資源的統計信息。因此,我所做的是通過創建文件的方式來創建標識,通過SSH連接到目標主機,然后用Linux命令“top”收集數據并在測試結束前進行解析,然后再次收集。然后分析出mysqld進程占用最大的CPU使用量,最后刪除該標識文件。你可以查看我在github上的代碼。
讓我們再次討論圖表結果,似乎表明MySQL 8.0消耗了大量的CPU,超過MySQL 5.7。然而,MySQL 8.0可能必須消耗額外的CPU在新的變量配置上。例如,這些變量可能會影響您的MySQL 8.0:
· innodb_log_spin_cpu_abs_lwm = 80
· innodb_log_spin_cpu_pct_hwm = 50
· innodb_log_wait_for_flush_spin_hwm = 400
· innodb_parallel_read_threads = 4
在此基準測試中,具有默認值的變量將保留其默認值。由于MySQL 8.0重新設計了InnoDB寫入REDO日志的方式(這是一個改進),前三個變量可配置處理重做日志的使用的CPU資源。例如,變量innodb_log_spin_cpu_pct_hwm具有CPU親和性,這意味著如果mysqld僅綁定到4個內核,它將忽略其他CPU內核。對于并行讀取線程,在MySQL 8.0中添加了一個新變量,您可以調整要使用的線程數。
然而,我沒有深入研究這個問題。可以通過利用MySQL8.0提供的特性來提高性能。
結論
MySQL 8.0中有許多改進,與MySQL 5.7相比,MySQL 8.0不僅在處理讀負載時,而且在讀寫混合的高負載下的性能都取得了令人矚目的進步。
在Mysql8.0 升級之后,如果開發人員和DBA期望獲得更好的數據庫管理體驗,建議立即更新您的數據庫管理工具,小編在這里為大家推薦:
1. 具備好看的UI和管理體驗的Navicat15!Navicat的上一版本號是Nacicat12,Navicat和Mysql都采用了跨版本號的發布方式,實在是讓小編感到很微妙!點此下載Navicat15。
Navicat for MySQL 是管理和開發 MySQL 或 MariaDB 的理想解決方案。它是一套單一的應用程序,能同時連接 MySQL 和 MariaDB 數據庫,并與 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、騰訊云和華為云等云數據庫兼容。這套全面的前端工具為數據庫管理、開發和維護提供了一款直觀而強大的圖形界面。
2. 專業的研發與DBA首選管理工具dbForge Studio for MySQL,一個通用的GUI工具,用于管理,開發和管理MySQL和MariaDB數據庫。它提供了內置的數據和模式比較和同步工具,數據庫報告工具以及許多工具,可以簡化數據庫開發過程。點擊這里下載最新版dbForge Studio for MySQL。
Mysql8.0發行時間表:
Changes in MySQL 8.0.20 (Not yet released, General Availability)
Changes in MySQL 8.0.19 (2020-01-13, General Availability)
Changes in MySQL 8.0.18 (2019-10-14, General Availability)
Changes in MySQL 8.0.17 (2019-07-22, General Availability)
Changes in MySQL 8.0.16 (2019-04-25, General Availability)
Changes in MySQL 8.0.15 (2019-02-01, General Availability)
Changes in MySQL 8.0.14 (2019-01-21, General Availability)
Changes in MySQL 8.0.13 (2018-10-22, General Availability)
Changes in MySQL 8.0.12 (2018-07-27, General Availability)
Changes in MySQL 8.0.11 (2018-04-19, General Availability)
Changes in MySQL 8.0.5 - 8.0.10 (Skipped version numbers)
Changes in MySQL 8.0.4 (2018-01-23, Release Candidate)
Changes in MySQL 8.0.3 (2017-09-21, Release Candidate)
Changes in MySQL 8.0.2 (2017-07-17, Development Milestone)
Changes in MySQL 8.0.1 (2017-04-10, Development Milestone)
Changes in MySQL 8.0.0 (2016-09-12, Development Milestone)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn