實測:雲RDS MySQL效能是自建的1.6倍

jyzhou發表於2022-06-20

1. 摘要

基於之前寫的雲廠商 RDS MySQL 怎麼選的文章,為了進一步瞭解各雲廠商在RDS MySQL資料庫效能上的差異,本文將對自建MySQL、阿里雲、騰訊雲、華為雲和AWS 的 RDS MySQL資料庫效能進行對比說明。本文的壓測結果僅作為參考,不作為購買建議。

 

2. 測試結果

從本文「測試詳情」裡的各個結論中得到如下結果

說明100分制,按照本文後面測試詳情結論進行評分。評分規則比較簡單:最好的為100分,其次按照和100分的比值進行打分,如「自建-Percona」的QPS為1000,得分100分,「自建-MySQL」的QPS為900,則得90分。

補充:通用的效能可能會比獨享高20%~30%,價格也比獨享低,是因為通用存在超賣現象。但也有可能受超賣影響導致穩定性不高,請根據實際情況選擇使用。

 

具體的資訊可以看:「實測:雲RDS MySQL效能是自建的1.6倍」,該內容同步釋出於微信公眾號:「雲資料庫技術」,歡迎訂閱,第一時間獲取資訊。

 

3. 測試說明

為更好的對比各個雲廠商資料庫的效能,使用壓測工具sysbench,該工具是一個開源的、模組化的、跨平臺的多執行緒效能測試工具,可以用來進行CPU、記憶體、磁碟I/O、執行緒、資料庫的效能測試。

3.1 測試指標(sysbench值)

  • 每秒執行事務數TPS(Transactions Per Second)

  • 每秒執行請求數QPS(Queries Per Second)

3.2 測試說明

  • 分3個場景進行測試:「讀寫」、「只讀」、「只寫」,每個場景進行2~3000個執行緒壓測,取壓測下的QPS、TPS的平均值之和作為效能對比指標。

  • 例項規格分獨享規格和通用規格:

  • 獨享規格:每個叢集會獨佔所分配到的計算資源(如CPU),而不會與同一伺服器上的其他叢集共享資源,效能穩定可靠
  • 通用規格:同一伺服器上的不同叢集,會互相充分利用彼此空閒的計算資源(如CPU),通過複用計算資源享受規模紅利,會出現超賣現象(效能更好,可能會受同一物理機上的其他通用規格例項影響),價效比高,穩定性不高

  

4. 測試詳情

4.1 測試環境

  • 非同步複製

  • 資料超過 innodb_buffer_pool_size

  • 高效能模板引數 

    sync_binlog                     = 1000
    innodb_flush_log_at_trx_commit  = 2
    innodb_flush_method             = O_DIRECT
    innodb_buffer_pool_size         = 12gb
    innodb_flush_neighbors          = 0
    max_prepared_stmt_count         = 1048575
    
    #Percona
    thread_handling                 = pool-of-threads
  • 例項規格

  • 客戶端規格

  補充

    • 自建MySQL/Percona部署在阿里雲的ECS上,資料盤是PL2(PL2規格的磁碟空間需要大於500G)

    • Percona Server 使用執行緒池功能

    • 主從服務端和客戶端都在同一可用區和VPC

    • 各雲廠商的RDS例項引數(除高效能模板引數外)均保持預設

    • 華為雲的通用型規格是雲盤SSD

4.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=300  --threads={2~3000} 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=300   --threads={2~3000} --percentile=95 --report-interval=1 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=300  --threads={2~3000} --percentile=95 --skip-trx=1 --report-interval=1 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=300   --threads={2~3000} --percentile=95 --report-interval=1 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=300   --threads={2~3000} --percentile=95  oltp_read_write/oltp_read_only/oltp_write_only cleanup

4.3 測試場景

對讀寫、只讀、只寫三個場景,執行緒數從2到3000進行壓測說明。

4.3.1 讀寫場景

QPS:

TPS:

讀寫場景結論

  • 阿里雲的通用型比獨享型效能高23%;騰訊雲的通用型比獨享型效能高52%;華為雲的通用型比獨享型效能高8%。自建的Percona Server比社群版的MySQL 效能高7%;

  • 「自建-MySQL」沒有支援執行緒池,在512執行緒池之後,效能逐步下降;

  • 「騰訊雲-獨享」在16執行緒之前效能不高,隨著執行緒增加效能逐步上升,並保持穩定;

  • 「自建MySQL/Percona」在2個執行緒的時候,效能比各雲廠商的效能好;在4執行緒的時候和個雲廠商效能差不多(騰訊雲除外),在8個執行緒之後就遠落後於個雲廠商(騰訊雲-獨享除外);

 

從QPS和TPS的平均值之和,效能從高到低依次排序為:「阿里雲-通用」>「華為雲-通用」> 「騰訊雲-通用」> 「華為雲-獨享」> 「阿里雲-獨享」> 「自建-Percona」> 「自建-MySQL」> 「AWS」> 「騰訊雲-獨享」

 

4.3.2 只讀場景

QPS:

TPS:

只讀場景結論:

  • 阿里雲的通用型比獨享型效能高30%;騰訊雲的通用型比獨享型效能高59%;華為雲的通用型和獨享型效能接近。自建的Percona Server比社群版的MySQL 效能高9%;

  • 「自建-MySQL」沒有支援執行緒池,在512執行緒池之後,效能逐步下降;

  • 「騰訊雲-獨享」在32執行緒之前效能不高,隨著執行緒增加效能逐步上升,並保持穩定(慢熱);

  • 「自建MySQL/Percona」在4個執行緒之前,效能比各雲廠商的效能好(除AWS和華為雲-獨享);在8個執行緒之後低於各雲廠商(騰訊雲-獨享除外),32個執行緒的時候,「自建MySQL」開始低於「騰訊雲-獨享」,「騰訊雲-獨享」和「自建-Percona」相近。

 

從QPS和TPS的平均值之和,效能從高到低依次排序為:「華為雲-獨享」>「阿里雲-通用」> 「華為雲-通用」> 「騰訊雲-通用」> 「阿里雲-獨享」> 「自建-Percona」> 「AWS」> 「自建-MySQL」> 「騰訊雲-獨享」

 

4.3.3 只寫場景

QPS:

TPS:

只寫場景結論:

  • 阿里雲的通用型比獨享型效能高26%;騰訊雲的通用型比獨享型效能高39%;華為雲的通用型比獨享型效能高78%。自建的Percona Server比社群版的MySQL 效能高7%;

  • 「自建-MySQL」沒有支援執行緒池,在512執行緒池之後,效能逐步下降;

  • 「騰訊雲-獨享」在32執行緒之前效能不高,隨著執行緒增加效能逐步上升,並保持穩定(慢熱);

  • 「自建MySQL/Percona」在8個執行緒之前,效能比各雲廠商的效能好(除AWS外);在8個執行緒之後低於各雲廠商,「華為雲-獨享」和「自建MySQL」相近。

 

從QPS和TPS的平均值之和,效能從高到低依次排序為:「華為雲-通用」>「阿里雲-通用」> 「騰訊雲-通用」> 「阿里雲-獨享」> 「AWS」> 「騰訊雲-獨享」> 「自建-Percona」> 「自建-MySQL」> 「華為雲-獨享」

 

4.4 補充說明

  • 「騰訊雲-獨享」分數低是因為線上程數少的時候,效能不高(比自建例項低),即使在後續512執行緒的時候表現不錯,但是在整體上取得的分數不高。

  • 執行緒池在大量短連線或者高併發情況下,有比較好的表現,沒有支援執行緒池的「自建MySQL」和「AWS」在連線數大於2000的時候效能下降明顯。

  • 「自建MySQL/Percona」在2~4個執行緒的壓力下,整體效能比RDS要好,如果例項壓力很小,可以使用自建的方式部署,不然用雲資料庫是首選。

  • AWS 連線執行緒數最高512(超過1024報錯),另外還需要額外購買IOPS,本文壓測的時候IOPS沒有買到最大值,gp2和io1的區別可以看官方文件說明。

  • 「阿里雲-獨享」連線執行緒數最高為2400,因為3000超過了max_user_connections引數(規格限制了)。

  • 本文的測試結果是從5月份測試報告中得出,期間各雲廠商可能有新功能釋出和硬體升級,可能在看到文章的時候某些結論已經有所不同。

4.5 測試小結

通過對「讀寫」、「只讀」、「只寫」場景下的壓測,並取壓測結果QPS、TPS的平均值之和來統計,得到也可以直接看文章開頭部分的測試結果):

  • 讀寫混合場景:「阿里雲-通用」的效能最高,高出「華為雲-通用」6%,高出「騰訊雲-通用」13%,高出「華為雲-獨享」14%,高出「阿里雲-獨享」23%,高出「自建Percona」51%,高出「自建-MySQL」61%,高出「AWS」66%,高出「騰訊雲-獨享」72%。

  • 只讀場景:「華為雲-獨享」的效能最高,高出「阿里雲-通用」1%,高出「華為雲-通用」3%,高出「騰訊雲-通用」8%,高出「阿里雲-獨享」31%,高出「AWS」52%,高出「自建Percona」53%,高出「自建-MySQL」66%,高出「騰訊雲-獨享」72%。

  • 只寫場景:「華為雲-通用」的效能最高,高出「阿里雲-通用」4%,高出「騰訊雲-通用」7%,高出「阿里雲-獨享」31%,高出「AWS」40%,高出「騰訊雲-獨享」49%,高出「自建Percona」63%,高出「自建-MySQL」75%,高出「華為雲」78%。

5. 總結

通過測試詳情的說明,得出本文開頭部分的「測試結果」,希望通過本文,對大家在選擇雲廠商RDS MySQL產品時有幫助。 

最後,通過雲廠商 RDS MySQL 怎麼選和本文的說明,可以看到「雲RDS MySQL」無論在產品周邊的運維能力還是效能上都明顯優於「自建MySQL例項」,並且在高併發的壓力下尤為突出。所以在業務允許的情況下,上雲是一個非常不錯的選擇。

 

相關文章