雙寫緩衝區是一個儲存區域,在 InnoDB
將頁面寫入其在 InnoDB
資料檔案中的正確位置之前,會先將從緩衝池刷新的頁面寫入其中。如果作業系統、儲存子系統或意外的 mysqld 程序在頁面寫入過程中退出,InnoDB
可以在當機復原期間從雙寫緩衝區中找到該頁面的良好副本。
雖然資料會寫入兩次,但雙寫緩衝區不需要兩倍的 I/O 額外負荷或兩倍的 I/O 操作。資料會以大型循序區塊寫入雙寫緩衝區,並對作業系統進行單一的 fsync()
呼叫(除非 innodb_flush_method
設定為 O_DIRECT_NO_FSYNC
的情況)。
雙寫緩衝區的儲存區域位於雙寫檔案中。
提供以下變數用於雙寫緩衝區配置
innodb_doublewrite
變數控制是否啟用雙寫緩衝區。在大多數情況下,預設會啟用它。若要停用雙寫緩衝區,請將innodb_doublewrite
設定為OFF
。如果您更關心效能而非資料完整性,例如在執行基準測試時,可以考慮停用雙寫緩衝區。innodb_doublewrite
支援DETECT_AND_RECOVER
和DETECT_ONLY
設定。DETECT_AND_RECOVER
設定與ON
設定相同。使用此設定時,雙寫緩衝區會完全啟用,資料庫頁面內容會寫入雙寫緩衝區,在復原期間會存取該緩衝區以修正不完整的頁面寫入。使用
DETECT_ONLY
設定時,只有中繼資料會寫入雙寫緩衝區。資料庫頁面內容不會寫入雙寫緩衝區,且復原不會使用雙寫緩衝區來修正不完整的頁面寫入。此輕量型設定僅用於偵測不完整的頁面寫入。MySQL 支援動態變更
innodb_doublewrite
設定,該設定可在ON
、DETECT_AND_RECOVER
和DETECT_ONLY
之間啟用雙寫緩衝區。MySQL 不支援在啟用雙寫緩衝區的設定與OFF
之間進行動態變更,反之亦然。如果雙寫緩衝區位於支援原子寫入的 Fusion-io 裝置上,則會自動停用雙寫緩衝區,並改用 Fusion-io 原子寫入執行資料檔案寫入。然而,請注意,
innodb_doublewrite
設定是全域的。停用雙寫緩衝區時,會針對所有資料檔案(包括未位於 Fusion-io 硬體上的檔案)停用雙寫緩衝區。此功能僅在 Fusion-io 硬體上支援,且僅適用於 Linux 上的 Fusion-io NVMFS。為了充分利用此功能,建議將innodb_flush_method
設定為O_DIRECT
。innodb_doublewrite_dir
變數定義了InnoDB
建立雙寫檔案的目錄。如果沒有指定目錄,雙寫檔案會建立在innodb_data_home_dir
目錄中,如果未指定,則預設為資料目錄。雜湊符號 '#' 會自動加在指定的目錄名稱前面,以避免與 schema 名稱衝突。但是,如果在目錄名稱中明確指定了 '.'、'#' 或 '/' 前綴,則雜湊符號 '#' 不會加在目錄名稱前面。
理想情況下,雙寫目錄應該放置在可用的最快儲存媒體上。
innodb_doublewrite_files
變數定義了雙寫檔案的數量,預設為 2。預設情況下,每個緩衝池實例會建立兩個雙寫檔案:一個刷新列表雙寫檔案和一個 LRU 列表雙寫檔案。刷新列表雙寫檔案用於從緩衝池刷新列表中刷出的頁面。刷新列表雙寫檔案的預設大小為
InnoDB
頁面大小 * 雙寫頁面位元組數。LRU 列表雙寫檔案用於從緩衝池 LRU 列表中刷出的頁面。它還包含用於單頁刷新的插槽。LRU 列表雙寫檔案的預設大小為
InnoDB
頁面大小 * (雙寫頁面數 + (512 / 緩衝池實例數量)),其中 512 是為單頁刷新保留的插槽總數。最少會有兩個雙寫檔案。雙寫檔案的最大數量是緩衝池實例數量的兩倍。(緩衝池實例的數量由
innodb_buffer_pool_instances
變數控制。)雙寫檔案的名稱格式如下:
#ib_
(或者使用page_size
_file_number
.dblwrDETECT_ONLY
設定時為.bdblwr
)。例如,以下雙寫檔案是為具有 16KB 的InnoDB
頁面大小和單個緩衝池的 MySQL 實例建立的#ib_16384_0.dblwr #ib_16384_1.dblwr
innodb_doublewrite_files
變數旨在用於進階效能調整。預設設定應適用於大多數使用者。innodb_doublewrite_pages
變數控制每個執行緒的最大雙寫頁面數。此變數旨在用於進階效能調整。預設值應適用於大多數使用者。
InnoDB
會自動加密屬於加密表空間的雙寫檔案頁面(請參閱第 17.13 節,「InnoDB 資料靜態加密」)。同樣,屬於頁面壓縮表空間的雙寫檔案頁面也會被壓縮。因此,雙寫檔案可以包含不同的頁面類型,包括未加密和未壓縮的頁面、加密的頁面、壓縮的頁面以及既加密又壓縮的頁面。