(轉)innodb 與 myisam 讀寫性能分析


前提: mysql在5.0之前,讀寫性能相差很大,讀性能:myisam 很強

       mysql在5.0之后,差距不是很大

 

http://passover.blog.51cto.com/2431658/507265

http://blog.csdn.net/cchaha/article/details/1782723

http://www.taobaodba.com/

 

由於近期有個項目對系統性能要求很高,技術選型上由於種種原因已經確定使用Mysql數據庫,接下來就是要確定到底使用哪種存儲引擎。我們的應用是典型的寫多讀少,寫入內容為也很短,對系統的穩定性要求很高。所以存儲引擎肯定就定在廣泛使用的Innodb和MyISAM之中了。

    至於兩者的比較網上也有很多,但是畢竟這個事情也不復雜,決定還是自己來做,去驗證一下在我們的場景下誰更優。

測試的版本是mysql  Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (i686),使用的是Innodb plugin 1.0.8(官方稱比built-in版本性能更好)和默認的MyISAM。

測試機器是我的筆記本,配置如下:Intel 酷睿2雙核 P8600,2G*2 DDR3 1066內存,320G硬盤5400轉。

    測試一:數據插入性能測試,這里我分別對innodb_flush_log_at_trx_commit參數打開和關閉都測了了一下,每次測試都是運行40s,表中數字都是實際插入條數。

 

MyISAM  Innodb (打開)  Innodb (關閉)

 

單線程,逐個插入 120000  60000 60000

 

4線程,逐個插入  40000*4  20000*4 40000*4

 

單線程,批量100條/次插入 3600*100 800*100 3000*100

 

單線程,批量200條/次插入 1800*200 400*200 1600*200

    可以發現批量插入的性能遠高於單條插入,但是一次批量的大小對性能影響不大。每條記錄是否都刷新日志的參數對innodb性能的影響巨大。總體上來說,MyISAM性能更優一點。這里有一點需要注意,在插入測試過程中,我對系統資源進行了監控,發現MyISAM對系統資源占用很低,但是Innodb對磁盤占用卻很高,應該是對事務控制多了很多需要記錄的日志。

    測試二:數據讀取性能測試。每次隨機讀取1000條記錄,反復進行讀取。

 

MyISAM  Innodb

 

單線程,200次讀取 5.7s 16.7s

 

4線程,200次讀取 12s 40.8s

 

    可以看出MyISAM的讀取性能非常恐怖,性能差距在3倍的樣子。

    以上兩個測試發現MyISAM在無事務的需求下幾乎完勝,但是要知道它是表鎖,Innodb是行鎖,那么在並發讀寫同時存在的情況下,那結果會是怎么樣呢?!

    測試三:兩個線程並發寫入,2個線程並發讀取。

 

 MyISAM  Innodb

 

逐個插入 寫入40s:10000*2 讀取200次*2:14s  寫入40s:60000*2 讀取200次*2:50s

 

批量100條/次插入 寫入40s:1000*100*2 讀取200次*2:10s 寫入40s:1500*100*2 讀取200次*2:50s

 

    這下立刻顯示出Innodb在並發情況下強勁的性能,幾乎沒有什么性能衰減。而MyISAM單條插入速度變得非常慢,批量插入也下降了40%性能。

    總結一下,在寫多讀少的應用中還是Innodb插入性能更穩定,在並發情況下也能基本,如果是對讀取速度要求比較快的應用還是選MyISAM。

    另外提一下,這里需要用到對Innodb的熱備份,除了用Master-Slave的方式,還可以選用XtraBackup這個開源軟件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM