Mysql 過大sql檔案匯入過慢問題解決

2022-06-14 19:24:08 字數 2164 閱讀 3215

控制 mysql 磁碟寫入策略 以及 資料安全性 的兩個關鍵引數:innodb_flush_log_at_trx_commitsync_binlog

引數:innodb_flush_log_at_trx_commit

如果設定為0,log buffer將每秒一次地寫入log file中,並且同時進行log file的flush(重新整理到磁碟中)操作。此模式下,在事務提交時,不主動觸發寫入磁碟的操作;

如果設定為1,此模式下,在每次事務提交時,mysql都會把log buffer的資料寫入log file中,並且同時進行log file的flush(重新整理到磁碟中)操作;

如果設定為2,此模式下,在每次事務提交時,mysql都會把log buffer的資料寫入log file中,但是不會同時進行log file的flush(重新整理到磁碟中)操作,會每秒執行一次log file的flush(重新整理到磁碟中)操作。

注意:由於程序排程策略問題,不能保證"每秒執行一次flush(重新整理到磁碟中)操作"100%的"每一秒執行一次"。

引數:sync_binlog

如果設定n=0,像作業系統重新整理其他檔案的機制一樣,mysql不會同步到磁碟中去,而是依賴作業系統來重新整理binary log。

如果設定n>0,mysql在每寫n次二進位制日誌binary log時,會呼叫fdatasync()函式將二進位制日誌binary log同步到磁碟中去。

注意:如果啟用了autocommit,那麼每乙個語句statement就會有一次寫操作;否則每個事務對應乙個寫操作。

如圖:

效能:

測試場景1:

innodb_flush_log_at_trx_commit=2sync_binlog=1000
測試場景2:

innodb_flush_log_at_trx_commit=1sync_binlog=1000
測試場景3:

innodb_flush_log_at_trx_commit=1sync_binlog=1
測試場景4:

innodb_flush_log_at_trx_commit=1sync_binlog=1000
測試場景5:

innodb_flush_log_at_trx_commit=2sync_binlog=1000
innodb_flush_log_at_trx_commit

sync_binlog                         

tps                                

1000

241000

1000

13300011

26000

1000

133000

由此可見:

ⅰ、當innodb_flush_log_at_trx_commit=1和sync_binlog=1時,寫入操作效能最差;

ⅱ、當innodb_flush_log_at_trx_commit=2和sync_binlog=2時,寫入操作達到最高效能;

安全:

當innodb_flush_log_at_trx_commit設定為0時,mysqld程序崩潰會導致上一秒所有事務資料丟失。

當innodb_flush_log_at_trx_commit和sync_binlog都為1時最為安全,mysqld程序崩潰或者伺服器crash的情況下,binary log只有可能最多丟失乙個事務。

當innodb_flush_log_at_trx_commit設定為2時,只有在伺服器崩潰或斷電情況下,上一秒所有事務資料才可能丟失。

MySQL匯入SQL檔案過大或連線超時的解決辦法

連線超時,匯入的sql檔案過大解決辦法 set global max allowed packet 100000000 set global net buffer length 100000 set global interactive timeout 28800000 set global wai...

mysql匯入sql檔案過大或連線超時的解決辦法

set global max allowed packet 100 000 000 set global net buffer length 100000 set global interactive timeout 28800 000 set global wait timeout 2880000...

Mysql匯入過大sql檔案過慢問題解決

首先需要改動下mysql的配置,這個也是我自己在網上找的,我感覺網上的比較亂,所以自己就整理了一下,也是對自己遇到問題的乙個記錄吧!1.改動mysql配置的語句 然後執行之後重新啟動mysql服務。2.然後採用dos命令列的方法執行sql檔案,先進入mysql執行環境,選擇資料庫 我的資料庫已經在電...