MySQL該使用哪種CPU架構服務器?
1. 摘要
近期,阿里雲推出基於 ARM 架構的 RDS MySQL 和 RDS PostgreSQL 實例,現處於邀測階段,阿里雲宣傳 ARM 架構的亮點是:在價格下降13%的基礎上,平均性能 ARM 架構比 X86 架構提升10%,性價比提升25%。參考
那該選擇哪種CPU架構給MySQL實例呢?只有通過測試才能得出結論。在測試不同架構的MySQL之前,先了解下當前CPU的兩種架構:X86 和 ARM。也可以直接到第4部分看「測試結果」。
具體的信息可以看:MySQL該使用哪種CPU架構服務器,
關注公眾號 ,能夠第一時間了解行業動態。
2. X86 vs ARM
CISC(complex instruction set computer,複雜指令集計算機)和 RISC(reduced instruction set computer,精簡指令集計算機)是當前CPU的兩種架構。它們的區別是不同的CPU設計理念和方法,雖然都是在體系結構、操作運行、軟件硬件、編譯時間等諸多因素中做出某種平衡,以求達到高效的目的,但因採用的方法不同導致在很多方面差異很大。X86架構採用CISC,而 ARM 採用 RISC。
-
什麼是X86架構
X86 是Intel在1978年推出,是當時最先開發製造的一種微處理器體系的結構。目前的PC架構絕大多數都是Intel的 X86 架構,也是因為該架構造讓Intel統治整個CPU產業鏈長達數十年。
X86 基於CISC,是一種微處理器指令集架構,每個指令可執行若干操作,以增加處理器本身複雜度作為代價,去換取更高的性能,增加了功耗和設計難度。
-
什麼是ARM架構
ARM 成立於1991年,是全球領先的半導體知識產權提供商(ARM Holdings)。採用將芯片的設計方案授權給其他硬件製造商,該方式使它在全球上有了上百個合作夥伴:高通、華為、聯發科、飛思卡爾、TI等。
相較於 X86 架構處理器,ARM 架構則大幅簡化架構,僅保留所需要的指令。雖在最初的PC架構中敗給 Intel 主導的 X86 架構,但其低成本、高性能和低功耗的特性,讓它在移動市場比 X86 更具優勢,如智能手機、平板電腦、嵌入式系統等。
-
二者區別
X86是服務器市場的主流架構,而 ARM 是目前最普及的移動電子設計方案的架構。幾乎所有智能手機以及其他小型移動設備和筆記本電腦都採用的是 ARM 架構。從下面幾方便大致了解下它們間的一些差異,關於更多的信息可以查看文章最後部分的參考文檔。-
性能:
X86 架構比 ARM 架構的系統在性能方面要強得多。X86 追求的是性能,而ARM 架構的處理器則致力於實現成本與更小尺寸、更低功耗、更長電池使用時間之間的平衡,以能效為目標。 -
兼容性:
X86 架構比 ARM 架構的系統在兼容性方面要好得多。X86 由微軟及Intel構建的Wintel聯盟壟斷了個人電腦操作系統近30年,在硬件和軟件開發方面已經形成統一的標準。
ARM 系統幾乎都採用Linux操作系統,而且大部分的硬件系統都要單獨構建,與其他系統不能兼容,這一點嚴重製約了 ARM 系統的發展和應用。在2007年Google開發了Android系統,並統一了 ARM 結構的操作系統,以及Apple公司的助力(基於 ARM 的M1、M2),為 ARM 的發展提供了強大的支持和動力。 -
擴展性:
X86 架構的電腦採用「橋」的方式與擴展設備(如:硬盤、內存等)進行連接,由於 X86 架構統治了PC機近30年,其配套擴展的設備種類多,所以 X86 架構很容易進行擴展,如增加內存、硬盤等。
ARM 架構的電腦是通過專用的數據接口使CPU與數據存儲設備進行連接,所以 ARM 的存儲、內存等不容易擴展。 -
自由性:
Intel是一個全封閉式的商業模式,從頭到尾控制其整個設計和生產,並直接銷售芯片。將其架構、CPU 設計甚至製造完全保持在內部,利用壟斷獲取更大的利益。
ARM 是一個開放式的商業模式,自己並不生產處理器,而是將芯片的設計方案授權給其他硬件製造商,製造商可以根據市場需求修改和生產。這也是為什麼ARM擁有眾多擁護者的主要原因,華為、蘋果、三星、英偉達、高通等都是 ARM 的代表。
-
3. 如何選擇
在過去十年到現在,隨着生態系統越來越多地支持這兩種架構,RISC 和 CISC 之間的界限變得越來越模糊。但在可預見的未來,ARM 仍是智能手機行業等移動領域的首選架構,Intel 在低功耗方面的努力多年來也有所改進,並且Intel 在PC和服務器領域使用的 X84-64 架構在性能方面仍然領先ARM。MySQL 是目前最流行的關係型數據庫管理系統,X86-64架構的服務器幾乎是其標配。但隨着雲計算的不斷發展,全球主流的雲廠商為了降低總體成本和提高整體效率,都相繼開始嘗試用低功耗、低成本的 ARM 架構來作為數據庫服務器。如阿里雲在近期推出的基於ARM 架構的 RDS MySQL和 RDS PostgreSQL。
本文將對部署在不同架構服務器上的 MySQL 實例進行測試,來了解下ARM 和X86 架構下的MySQL的性能表現。
4. 測試結果
通過對「讀寫」、「只讀」、「只寫」場景下的壓測,並取壓測結果QPS、TPS的平均值之和來統計,得到結果:
-
讀寫場景:「X86-RDS」性能和「ARM-RDS」幾乎持平,差距不大(2%以內);「X86-ECS」性能比「ARM-ECS」平均高17%左右。
-
只讀場景:「X86-RDS」性能「ARM-RDS」幾乎持平,差距不大(3%以內);「X86-ECS」性能比「ARM-ECS」平均高20%左右。
-
只寫場景:「X86-RDS」性能比「ARM-RDS」平均高15%左右(當CPU沒有被打滿差距不大,當CPU被打滿差10% ~ 20%);「X86-ECS」性能比「ARM-ECS」平均高20%左右。
5. 測試說明
5.1 測試環境
-
異步複製
-
數據超過 innodb_buffer_pool_size
-
高性能模板參數
sync_binlog = 1000 innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT innodb_buffer_pool_size = 6gb innodb_flush_neighbors = 0 max_prepared_stmt_count = 1048575
-
實例規格
5.2 測試方法
-- 準備數據 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} oltp_read_write prepare -- 運行workload # OLTP讀寫混合 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --report-interval=20 oltp_read_write run # OLTP只讀場景 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --skip-trx=1 --report-interval=20 oltp_read_only run # OLTP只寫場景 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --report-interval=20 oltp_write_only run -- 清理數據 sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 oltp_read_write/oltp_read_only/oltp_write_only cleanup
5.3 測試場景
對讀寫、只讀、只寫三個場景,線程數從2到128進行壓測說明。
5.3.1 讀寫場景
QPS:
TPS:
Latency:
5.3.2 只讀場景
QPS:
TPS:
Latency:
5.3.3 只寫場景
QPS:
TPS:
Latency:
最後,從「測試說明」里得出:
-
在阿里雲RDS for MySQL中,基於ARM架構和X86 架構的MySQL實例在「讀寫」、「只讀」場景下,性能接近;在「只寫」場景下,基於X86架構比 ARM架構的MySQL實例性能高15%。
-
在自建MySQL實例中,各場景下,本例中X86架構的服務器性能高於ARM架構的服務器20%,具體的性能會隨着服務器CPU主頻(GHz)不同而有所差異。
6. 總結
所以,最後可以回答標題中的問題了:MySQL該使用哪種CPU架構服務器?
-
如果使用RDS MySQL,在滿足性能的前提下(讀寫差不多或讀多寫少),從性價比上選擇,首選 ARM 架構的實例;要是寫的壓力比較大(寫遠高於讀),首選X86架構的實例。
-
如果使用自建MySQL,首選X86架構的實例(在CPU主頻區別不大的情況下)。
另外,此次性能測試的結果和阿里雲宣傳的有一些差異。諮詢了阿里雲的工作人員,給出的答覆是:邀測獲得免費ARM架構的RDS MySQL實例,其內核及所在的ECS不是最終商業化後的。在商業化後,RDS內核及ECS配置會更新,性能會有進一步提升。
補充,在MySQL On ARM的文章中:自建MySQL實例,在低負載下,ARM和X86架構在讀性能上差距不大,在高負載下,X86的性能要優於ARM;在有寫的場景下,ARM要差於X86架構。
參考文檔
[redhat] //www.redhat.com/en/topics/linux/what-is-arm-processor
[wikipedia] //en.wikipedia.org/wiki/ARM_architecture_family
[wikipedia] //en.wikipedia.org/wiki/X86
[androidauthority] Arm vs x86: Instruction sets, architecture, and all key differences explained
其他
//bbs.elecfans.com/m/jishu_2099774_1_1.html
//m.elecfans.com/article/678193.html
//server.zol.com.cn/354/3542316.html
//www.makeuseof.com/x86-vs-arm-which-architecture-should-pc-use/
//www.makeuseof.com/tag/cpu-technology-explained/
//engineering.carsguide.com.au/arm-versus-x86-for-database-server-comparison-review-8911d3c582e9
//mysqlonarm.github.io/MySQL-on-x86-vs-ARM/