目前遇到一個問題,mysql使用source命令導入 *.sql 數據文件時,運行的很慢,大概一秒鍾插入個一兩百條左右的樣子,對於大的文件來說這個太慢了,從其他博主那邊搜集了一些方案,簡單說就是一句話:SET GLOBAL innodb_flush_log_at_trx_commit = 2;
1.登入mysql
修改完成后在次執行相同的文件,200M大約200w+條的數據在1分鍾左右。
對於該參數的不同值的說明:
1.innodb_flush_log_at_trx_commit參數為 0
binlog_group_flush && thd_flush_log_at_trx_commit(NULL) == 0 條件成立,因此直接return了,那么這種情況下log_buffer_flush_to_disk函數不會調用,因此不會做redo刷盤。依賴master線程。
2.innodb_flush_log_at_trx_commit參數為 1
!binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回為1即為True,因此調用log_buffer_flush_to_disk(True),因此需要做redo刷盤,也要做sync。
3.innodb_flush_log_at_trx_commit參數為 2
!binlog_group_flush|| thd_flush_log_at_trx_commit(NULL) == 1 返回為0即為Flase,因此調用log_buffer_flush_to_disk(Flase),因此需要做redo刷盤,不做sync。依賴OS的刷盤機制。