解決mysql導入數據文件過慢的問題


目前遇到一個問題,mysql使用source命令導入 *.sql 數據文件時,運行的很慢,大概一秒鍾插入個一兩百條左右的樣子,對於大的文件來說這個太慢了,從其他博主那邊搜集了一些方案,簡單說就是一句話:SET GLOBAL innodb_flush_log_at_trx_commit = 2;

   1.登入mysql

mysql -uroot -p***


2.查看mysql中對於參數 innodb_flush_log_at_trx_commit 的配置

show global variables where variable_name = 'innodb_flush_log_at_trx_commit';

 3.修改

SET GLOBAL innodb_flush_log_at_trx_commit = 2;

修改完成后在次執行相同的文件,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的刷盤機制。


免責聲明!

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



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