MySQL 雙寫(MySQL Double Write)是 MySQL 引擎 InnoDB 中的一種保護數據完整性的機制。
在 InnoDB 引擎中,每個數據頁默認為 16KB 大小,當執行數據寫入時,InnoDB 先將數據寫入到內存緩沖池中的雙寫緩沖池(Double Write Buffer)中,然后再將數據寫入到磁盤上的數據文件中,最后將雙寫緩沖池中的數據緩慢地寫入到磁盤上。
雙寫緩沖池中的數據頁是 InnoDB 的一個區域,大小為 2x16KB,即 32KB,用于緩沖寫入磁盤的數據頁。寫入磁盤時,將雙寫緩沖池中的數據頁一次性寫入磁盤上的數據文件,可以保證數據頁的完整性。
如果不使用雙寫機制,那么在寫入數據時,有可能會發生數據頁寫入不完整的情況,因為磁盤的寫入操作不是原子性的。如果寫入不完整的數據頁被恢復,可能會導致數據文件的損壞。
// 查看當前 MySQL 實例中 InnoDB 引擎的雙寫狀態 SHOW VARIABLES LIKE 'innodb_doublewrite'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | innodb_doublewrite | ON | +-------------------+-------+
可以在 MySQL 的配置文件中將雙寫機制開啟或關閉:
# 在 MySQL 配置文件中關閉雙寫機制 innodb_doublewrite = 0
MySQL 雙寫機制的開啟與關閉可以根據實際情況進行決定。