Mysql
什麼時候禁用 InnoDB 雙寫緩衝是安全的?
MySQL InnoDB 允許我們通過設置來禁用雙寫緩衝
innodb_doublewrite = 0
。其他數據庫似乎不允許調整此設置。如果我們禁用雙寫緩衝,InnoDB 怎麼能保持數據完整性和ACID ?
在什麼情況下關閉 InnoDB 雙寫緩衝區是安全的?
我能想到的唯一情況是重新載入一個大的mysqldump。為什麼 ?
查看這張 InnoDB 的圖示(Percona CTO Vadim Tkachenko)
從圖中可以看到 InnoDB Buffer Pool 將臟頁寫入
- 日誌緩衝區
- 在 ibdata1 中插入緩衝區
- ibdata1 中的雙寫緩衝區
.ibd
每個 InnoDB 表的文件關閉雙寫緩衝區將使 mysqldump 更快地在表中寫入數據和索引頁,因為它不必將相同的16K 頁寫入 ibdata1。
生產伺服器不應該禁用雙寫緩衝區。如果您這樣做是為了更快地載入數據(當然是在維護期間),請在重新載入 DB 伺服器後立即啟用它。
換一種說法,
- 添加
innodb_doublewrite = 0
到my.cnf
- 跑步
SET GLOBAL innodb_fast_shutdown = 0;
- 重啟mysql
- 載入 mysqldump
innodb_doublewrite = 0
從中刪除my.cnf
- 跑步
SET GLOBAL innodb_fast_shutdown = 0;
- 重啟mysql