文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  雙寫緩衝區

17.6.4 雙寫緩衝區

雙寫緩衝區是一個儲存區域,在 InnoDB 將頁面寫入其在 InnoDB 資料檔案中的正確位置之前,會先將從緩衝池刷新的頁面寫入其中。如果作業系統、儲存子系統或意外的 mysqld 程序在頁面寫入過程中退出,InnoDB 可以在當機復原期間從雙寫緩衝區中找到該頁面的良好副本。

雖然資料會寫入兩次,但雙寫緩衝區不需要兩倍的 I/O 額外負荷或兩倍的 I/O 操作。資料會以大型循序區塊寫入雙寫緩衝區,並對作業系統進行單一的 fsync() 呼叫(除非 innodb_flush_method 設定為 O_DIRECT_NO_FSYNC 的情況)。

雙寫緩衝區的儲存區域位於雙寫檔案中。

提供以下變數用於雙寫緩衝區配置

  • innodb_doublewrite

    innodb_doublewrite 變數控制是否啟用雙寫緩衝區。在大多數情況下,預設會啟用它。若要停用雙寫緩衝區,請將 innodb_doublewrite 設定為 OFF。如果您更關心效能而非資料完整性,例如在執行基準測試時,可以考慮停用雙寫緩衝區。

    innodb_doublewrite 支援 DETECT_AND_RECOVERDETECT_ONLY 設定。

    DETECT_AND_RECOVER 設定與 ON 設定相同。使用此設定時,雙寫緩衝區會完全啟用,資料庫頁面內容會寫入雙寫緩衝區,在復原期間會存取該緩衝區以修正不完整的頁面寫入。

    使用 DETECT_ONLY 設定時,只有中繼資料會寫入雙寫緩衝區。資料庫頁面內容不會寫入雙寫緩衝區,且復原不會使用雙寫緩衝區來修正不完整的頁面寫入。此輕量型設定僅用於偵測不完整的頁面寫入。

    MySQL 支援動態變更 innodb_doublewrite 設定,該設定可在 ONDETECT_AND_RECOVERDETECT_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_doublewrite_dir 變數定義了 InnoDB 建立雙寫檔案的目錄。如果沒有指定目錄,雙寫檔案會建立在 innodb_data_home_dir 目錄中,如果未指定,則預設為資料目錄。

    雜湊符號 '#' 會自動加在指定的目錄名稱前面,以避免與 schema 名稱衝突。但是,如果在目錄名稱中明確指定了 '.'、'#' 或 '/' 前綴,則雜湊符號 '#' 不會加在目錄名稱前面。

    理想情況下,雙寫目錄應該放置在可用的最快儲存媒體上。

  • innodb_doublewrite_files

    innodb_doublewrite_files 變數定義了雙寫檔案的數量,預設為 2。預設情況下,每個緩衝池實例會建立兩個雙寫檔案:一個刷新列表雙寫檔案和一個 LRU 列表雙寫檔案。

    刷新列表雙寫檔案用於從緩衝池刷新列表中刷出的頁面。刷新列表雙寫檔案的預設大小為 InnoDB 頁面大小 * 雙寫頁面位元組數。

    LRU 列表雙寫檔案用於從緩衝池 LRU 列表中刷出的頁面。它還包含用於單頁刷新的插槽。LRU 列表雙寫檔案的預設大小為 InnoDB 頁面大小 * (雙寫頁面數 + (512 / 緩衝池實例數量)),其中 512 是為單頁刷新保留的插槽總數。

    最少會有兩個雙寫檔案。雙寫檔案的最大數量是緩衝池實例數量的兩倍。(緩衝池實例的數量由 innodb_buffer_pool_instances 變數控制。)

    雙寫檔案的名稱格式如下:#ib_page_size_file_number.dblwr (或者使用 DETECT_ONLY 設定時為 .bdblwr)。例如,以下雙寫檔案是為具有 16KB 的 InnoDB 頁面大小和單個緩衝池的 MySQL 實例建立的

    #ib_16384_0.dblwr
    #ib_16384_1.dblwr

    innodb_doublewrite_files 變數旨在用於進階效能調整。預設設定應適用於大多數使用者。

  • innodb_doublewrite_pages

    innodb_doublewrite_pages 變數控制每個執行緒的最大雙寫頁面數。此變數旨在用於進階效能調整。預設值應適用於大多數使用者。

InnoDB 會自動加密屬於加密表空間的雙寫檔案頁面(請參閱第 17.13 節,「InnoDB 資料靜態加密」)。同樣,屬於頁面壓縮表空間的雙寫檔案頁面也會被壓縮。因此,雙寫檔案可以包含不同的頁面類型,包括未加密和未壓縮的頁面、加密的頁面、壓縮的頁面以及既加密又壓縮的頁面。