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例項」,並且在高併發的壓力下尤為突出。所以在業務允許的情況下,上雲是一個非常不錯的選擇。