測試目的
對比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學習網