終於等到你——MySQL 5.7與PostgreSQL 9.6的百萬QPS大比拼

MySQL與PG(PostgreSQL)誰的性能更強是一個很有意思的話題,知乎上的回答貌似都在說PG能將MySQL遠遠的甩在身後,甚至有些回答的同學還給出了性能測試的截圖。

就區區看到的回答來看,測試的方法基本都很業餘。2015年做過MySQL與PostgreSQL的測試對比:MySQL PK PostgreSQL,不服,跑個分唄(第一季)但是由於後續測試伺服器被借調,因此未能完成後續的測試。

不過社區有人完成了這樣的測試,而且找了MySQL與PG領域最為頂級的專家來進行調優,測試結果應該說非常具有公信力。需要說明的是,這個測試數據全部緩存在內存,測試伺服器4 CPU、72Core、HT,一共144邏輯核。同學們可以將這個測試看成這兩個資料庫的最大性能,也可以觀察這兩個資料庫在擴展性方面的對比。

好了,不多說,直接放上MySQL 5.7 vs PostgreSQL 9.6的測試結果。

測試採用sybench的測試模型,首先看根據主鍵進行查詢的SELECT測試:

圖中MySQL-5.7 Dimitri表示官方MySQL資料庫,MySQL-5.7 Sveta使用的是Percona MySQL 5.7.15版本。從上圖來看MySQL 5.7對比官方版本PG 9.6在性能上要好非常多,QPS可達160萬,PG 最高140萬。在並發100個線程後,官方PG的性能下降比較明顯。

PG社區已定位問題所在,又是cache aligne所引發的,這個問題MySQL幾年前已經發現,代碼上也做了大量的優化。不過我們的程序員在開發時很少考慮這個問題,或許都對性能都不是很敏感。記得有一年網易校招的筆試題,我出了一題關於cache align的相關問題,可以說同學們幾乎是全軍覆沒。

pgxact-algin就是打上patch後的PG性能,貌似打上補丁後PG性能得到了極大的提示。最高QPS可以有170W(但官方目前還沒整合該patch,需要在其他場景下對此patch做進一步驗證)。整體來看,在打上patch後,PG與MySQL在主鍵SELECT上不分軒輊

對sysbench的RO(READ ONLY)測試來看,PG做的要比MySQL好,但是奇怪的是Percona版本比官方版本要差非常多。其實,這個測試結果有點出乎我的意料,因為range查詢和ORDER BY這樣的查詢來看,索引組織表會更有優勢。不過總體來看兩者最大差距10%,基本還是一個水準,高並發下能達到100萬QPS。

在sysbench的RW(讀寫)場景下,官方MySQL 5.7表現出了最好的性能,領先PG的幅度較大,超過4萬 TPS(72萬QPS)。async和trx=2表示允許事務非持久話,在生產上使用的可能性較小。

從最終測試來看,可以看出PG的性能並沒有比MySQL好,在sysbench讀寫測試的場景下MySQL會更有優勢。總體來看,兩者在OLTP上的表現都非常棒,但MySQL在生態和互聯網應用上的成熟度來看毫無疑問具有領導地位

可以發現關係型資料庫在全內存下的表現單實例已能超過150W QPS,即使讀寫也能達到72W QPS。而環顧四周,Redis和Memcached這類純內存KV資料庫似乎都無法達到這個高度。這是可能是一個有意思的話題,未來緩存怎麼選擇?用Redis還是MySQL Memcahced Plugin呢?前端的緩存速度還不如RDBMS?分散式呢?一個分散式集群QPS 100W?說不定一台MySQL又可以搞定了呢?

很多粉絲還沒有養成閱讀後點贊和轉發的習慣,希望大家在閱讀後順便點贊與轉發,以示鼓勵!長期堅持原創真的很不容易,多次想放棄。堅持是一種信仰,專註是一種態度!

推薦閱讀:

如何安裝與連接MySQL?
基於知乎用戶數據的基礎MySQL使用指南
時間序列資料庫漫談
建庫、搬家、開版與其他

TAG:MySQL | PostgreSQL | 数据库 |