Mysql

什麼時候禁用 InnoDB 雙寫緩衝是安全的?

  • June 4, 2020

MySQL InnoDB 允許我們通過設置來禁用雙寫緩衝innodb_doublewrite = 0。其他數據庫似乎不允許調整此設置

如果我們禁用雙寫緩衝,InnoDB 怎麼能保持數據完整性ACID ?

在什麼情況下關閉 InnoDB 雙寫緩衝區是安全的?

我能想到的唯一情況是重新載入一個大的mysqldump。為什麼 ?

查看這張 InnoDB 的圖示(Percona CTO Vadim Tkachenko)

InnoDB 架構

從圖中可以看到 InnoDB Buffer Pool 將臟頁寫入

  • 日誌緩衝區
  • 在 ibdata1 中插入緩衝區
  • ibdata1 中的雙寫緩衝區
  • .ibd每個 InnoDB 表的文件

關閉雙寫緩衝區將使 mysqldump 更快地在表中寫入數據和索引頁,因為它不必將相同的16K 頁寫入 ibdata1。

生產伺服器不應該禁用雙寫緩衝區。如果您這樣做是為了更快地載入數據(當然是在維護期間),請在重新載入 DB 伺服器後立即啟用它。

換一種說法,

  • 添加innodb_doublewrite = 0my.cnf
  • 跑步SET GLOBAL innodb_fast_shutdown = 0;
  • 重啟mysql
  • 載入 mysqldump
  • innodb_doublewrite = 0從中刪除my.cnf
  • 跑步SET GLOBAL innodb_fast_shutdown = 0;
  • 重啟mysql

引用自:https://dba.stackexchange.com/questions/86636