標籤:
MySQL 5.6 和 MariaDB-10.0 的效能比較測試時間 2013-02-14 10:11:34 開源中國原文 http://www.oschina.net/question/12_90065主題 MariaDB OLTP 測試技術
Oracle 剛剛發布了 MySQL 5.6.10 GA 版本,所以是時候更新下之前的效能測試資料了,此次的測試包括以下幾個版本:
- MySQL-5.5.29
- MySQL-5.6.10
- MariaDB-5.5.28a
- MariaDB-10.0.1
此次測試還保留了 5.5 版本是為了進行迴歸測試。之前我們經常發現新版本在效能上反倒而落後的情況。
此次測試在不同的環境下執行,主要的不同是沒用 SSD 而是使用高效能的帶 512 兆 battery-backed 緩衝的 RAID-5 儲存。此外測試的機器具有 16 核,其中 12 核運行 mysqld ,另外 4 核運行 sysbench。
測試使用 sysbench-0.5 OLTP ,包好 8 個表和 10G 的資料。InnoDB 的緩衝池大小是 16G,日誌 4G。不同的磁碟系統要求不同的 InnoDB 配置:
- innodb_io_capacity = 1000 (was 20000 for SSD)
- innodb_flush_neighbors = 1 (was 0 for SSD)
下面是測試結果,首先是 OLTP 唯讀:
非常奇怪,MySQL 5.6 在此輪測試中居然表現異常。在 8 個線程時相差不大,在 16 個線程時變現最佳。但更高的並發下效能就迅速下降,甚至比 MySQL 5.5 還差。而 MariaDB 10.0 則比 MariaDB 5.5 表現上要差一些,但沒那麼明顯。
而回應時間圖表則表示比較好而且平滑:
MySQL-5.6 和 MariaDB-10.0 看起來要稍微好一些,意味著它們能更好的分配 CPU 週期。
聲明: 此次測試沒有使用線程池。Oracle 的線程池實現已經閉源了,因此沒法進行測試和使用,如果在 MariaDB 上使用線程池的話就顯得有點不公平。
如果你想瞭解線程池對效能的影響,可查看之前的兩篇文章:
- MariaDB-5.5 thread pool performance
- MariaDB-5.5 performance on Windows
第二個測試:OLTP 讀寫測試
這個圖跟前一個測試差不多,MySQL 5.6 和 MariaDB 10.0 在效能表現上都比 5.5 版本要下滑不少,在高負載的情況下,下滑了 10% 左右。
這是一個人所共知的事實,MySQL 5.5 在高負載下因為同步的 flush 操作導致的效能下滑。
回應時間圖相對要好一些:
這是一個好訊息,5.5 版本在 64 個線程或者更多線程的情況下回應時間差了很多。而 MySQL 5.6 和 MariaDB 10.0 的適應性 flush 演算法似乎工作良好。
這裡還有一個問題:如果你使用多個緩衝池執行個體,你將會看到寫操作延遲更厲害。上面的結果中,唯讀測試使用了 16 個緩衝池,而讀寫測試只用了 1個。
結論:
- MySQL-5.6 效能表現比前一個版本要差,特別是高並發的情況下。這與 Oracle 發布的測試結果不符。我只能推測為什麼結果差異那麼大,我猜是 Oracle 閉源的線程池以及 Oracle 在更大的機器上進行測試導致。
- 使用單個緩衝池情況下不需要擔心寫延遲的問題。同時 MySQL 5.6 允許高達 512G 的 redo 日誌可降低同步 flush 操作。
此次測試的指令碼可通過下面地址訪問:
http://bazaar.launchpad.net/~ahel/maria/mariadb-benchmarks/revision/20
歡迎大家重做這個測試並與我們分享測試結果。
MySQL 5.6 和 MariaDB-10.0 的效能比較測試