基於之前寫的「雲廠商 RDS MySQL 怎麼選」的文章,為了進一步瞭解各雲廠商在RDS MySQL資料庫效能上的差異,本文將對自建MySQL、阿里雲、騰訊雲、華為雲和AWS 的 RDS MySQL資料庫效能進行對比說明。本文的壓測結果僅作為參考,不作為購買建議。
從本文「測試詳情」裡的各個結論中得到如下結果:
說明:100分制,按照本文後面測試詳情的結論進行評分。評分規則比較簡單:最好的為100分,其次按照和100分的比值進行打分,如「自建-Percona」的QPS為1000,得分100分,「自建-MySQL」的QPS為900,則得90分。
補充:通用的效能可能會比獨享高20%~30%,價格也比獨享低,是因為通用存在超賣現象。但也有可能受超賣影響導致穩定性不高,請根據實際情況選擇使用。
具體的資訊可以看:「實測:雲RDS MySQL效能是自建的1.6倍」,該內容同步釋出於微信公眾號:「雲資料庫技術」,歡迎訂閱,第一時間獲取資訊。
為更好的對比各個雲廠商資料庫的效能,使用壓測工具sysbench,該工具是一個開源的、模組化的、跨平臺的多執行緒效能測試工具,可以用來進行CPU、記憶體、磁碟I/O、執行緒、資料庫的效能測試。
3.1 測試指標(sysbench值)
每秒執行事務數TPS(Transactions Per Second)
每秒執行請求數QPS(Queries Per Second)
3.2 測試說明
分3個場景進行測試:「讀寫」、「唯讀」、「只寫」,每個場景進行2~3000個執行緒壓測,取壓測下的QPS、TPS的平均值之和作為效能對比指標。
範例規格分獨享規格和通用規格:
非同步複製
資料超過 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
-- 準備資料 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
對讀寫、唯讀、只寫三個場景,執行緒數從2到3000進行壓測說明。
QPS:
TPS:
TPS:
唯讀場景結論:
阿里雲的通用型比獨享型效能高30%;騰訊雲的通用型比獨享型效能高59%;華為雲的通用型和獨享型效能接近。自建的Percona Server比社群版的MySQL 效能高9%;
「自建-MySQL」沒有支援執行緒池,在512執行緒池之後,效能逐步下降;
「騰訊雲-獨享」在32執行緒之前效能不高,隨著執行緒增加效能逐步上升,並保持穩定(慢熱);
「自建MySQL/Percona」在4個執行緒之前,效能比各雲廠商的效能好(除AWS和華為雲-獨享);在8個執行緒之後低於各雲廠商(騰訊雲-獨享除外),32個執行緒的時候,「自建MySQL」開始低於「騰訊雲-獨享」,「騰訊雲-獨享」和「自建-Percona」相近。
從QPS和TPS的平均值之和,效能從高到低依次排序為:「華為雲-獨享」>「阿里雲-通用」> 「華為雲-通用」> 「騰訊雲-通用」> 「阿里雲-獨享」> 「自建-Percona」> 「AWS」> 「自建-MySQL」> 「騰訊雲-獨享」
QPS:
TPS:
只寫場景結論:
阿里雲的通用型比獨享型效能高26%;騰訊雲的通用型比獨享型效能高39%;華為雲的通用型比獨享型效能高78%。自建的Percona Server比社群版的MySQL 效能高7%;
「自建-MySQL」沒有支援執行緒池,在512執行緒池之後,效能逐步下降;
「騰訊雲-獨享」在32執行緒之前效能不高,隨著執行緒增加效能逐步上升,並保持穩定(慢熱);
「自建MySQL/Percona」在8個執行緒之前,效能比各雲廠商的效能好(除AWS外);在8個執行緒之後低於各雲廠商,「華為雲-獨享」和「自建MySQL」相近。
從QPS和TPS的平均值之和,效能從高到低依次排序為:「華為雲-通用」>「阿里雲-通用」> 「騰訊雲-通用」> 「阿里雲-獨享」> 「AWS」> 「騰訊雲-獨享」> 「自建-Percona」> 「自建-MySQL」> 「華為雲-獨享」
「騰訊雲-獨享」分數低是因為線上程數少的時候,效能不高(比自建範例低),即使在後續512執行緒的時候表現不錯,但是在整體上取得的分數不高。
執行緒池在大量短連線或者高並行情況下,有比較好的表現,沒有支援執行緒池的「自建MySQL」和「AWS」在連線數大於2000的時候效能下降明顯。
「自建MySQL/Percona」在2~4個執行緒的壓力下,整體效能比RDS要好,如果範例壓力很小,可以使用自建的方式部署,不然用雲資料庫是首選。
AWS 連線執行緒數最高512(超過1024報錯),另外還需要額外購買IOPS,本文壓測的時候IOPS沒有買到最大值,gp2和io1的區別可以看官方檔案說明。
「阿里雲-獨享」連線執行緒數最高為2400,因為3000超過了max_user_connections引數(規格限制了)。
本文的測試結果是從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%。
通過測試詳情的說明,得出本文開頭部分的「測試結果」,希望通過本文,對大家在選擇雲廠商RDS MySQL產品時有幫助。
最後,通過「雲廠商 RDS MySQL 怎麼選」和本文的說明,可以看到「雲RDS MySQL」無論在產品周邊的運維能力還是效能上都明顯優於「自建MySQL範例」,並且在高並行的壓力下尤為突出。所以在業務允許的情況下,上雲是一個非常不錯的選擇。