MySQL該使用哪種CPU架構伺服器?

2022-11-14 21:01:28

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] https://www.redhat.com/en/topics/linux/what-is-arm-processor

[wikipedia] https://en.wikipedia.org/wiki/ARM_architecture_family

[wikipedia] https://en.wikipedia.org/wiki/X86

[androidauthority] Arm vs x86: Instruction sets, architecture, and all key differences explained

其他

https://bbs.elecfans.com/m/jishu_2099774_1_1.html

https://m.elecfans.com/article/678193.html

https://server.zol.com.cn/354/3542316.html

https://www.makeuseof.com/x86-vs-arm-which-architecture-should-pc-use/

https://www.makeuseof.com/tag/cpu-technology-explained/

https://engineering.carsguide.com.au/arm-versus-x86-for-database-server-comparison-review-8911d3c582e9

https://mysqlonarm.github.io/MySQL-on-x86-vs-ARM/