MySQL插入性能測試

測試目的

對比myisam和innodb的性能差別,批量插入的效果。html

測試過程

環境

sync_binlog=0mysql

innodb_flush_method=O_DIRECTsql

innodb_flush_log_at_trx_commit=2數據庫

單次插入總數:10w條app

表結構

注:ip varchar(255)來源於業務,這裏暫不作修改。性能

CREATE TABLE `wm_buz_consume_time_log` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
`wm_poi_id` int(11) NOT NULL COMMENT,
`app_type` tinyint(2) DEFAULT ’0′ ,
`url` varchar(1024) DEFAULT NULL COMMENT ‘訪問url’,
`consume_time` int(11) DEFAULT ’0′ COMMENT ‘響應時間’,
`ip` varchar(255) DEFAULT NULL,
`ctime` int(11) DEFAULT NULL COMMENT ‘建立時間’,
PRIMARY KEY (`id`)
)學習

單條INSERT

innodb myisam
單線程 3688 4600
4線程 3400 4600
16線程 3200 4600

批量Insert

engine record/insert insert/second record/second
MyISAM 10 3554.22762529 35542.3
50 1982.53113005 99126.6
100 1117.44688596 111745
200 599.321012222 119864
300 399.327219915 119798
400 298.744724058 119498
500 246.173864279 123087
Inoodb 10 1987.27785192 19872.8
50 790.588036815 39529.4
100 510.040947166 51004.1
200 324.766895247 64953.4
300 203.101339928 60930.4
400 174.502397867 69801
500 142.428435136 71214.2

測試結論

MyISAM由於表級鎖,不受到線程數的影響;MyISAM顯著的比INNODB快(INNODB存在鎖、事務的開銷),單線程高27%,隨着線程數的增大,優點會更加明顯。測試

MyISAM批量插入性能改善的十分明顯,在單次批量到達100以後,插入速度基本上穩定下來,能夠達到10w record/s,是單條插入的24倍。url

Innodb批量插入性能改善的十分明顯,而且隨着批量次數的不斷增大,性能再持續增長,批量100,能夠打到5w record/s,是單條插入的14倍,可是隻有MyISAM的50%。spa

MyISAM雖然插入性能比INNODB快不少,可是依舊建議採用INNODB+批量寫入的方式,由於MyISAM存在表crash的問題(表很大的時候,索引較多的時候,recovery須要很長時間,而且recovery的過程當中不可讀寫);另外不建議批量太多,存在超出max_allowed_packet的風險,會致使數據庫在不少環節不太平滑。

轉載自:w3cstudy學習網

相關文章
相關標籤/搜索