文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 目錄中建立雙寫檔案,如果未指定,則預設為資料目錄。

    為了避免與綱要名稱衝突,指定的目錄名稱會自動加上井字號 '#' 作為前綴。然而,如果目錄名稱中明確指定了 '.'、'#' 或 '/' 前綴,則不會在目錄名稱前加上井字號 '#'。

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

  • innodb_doublewrite_files

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

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

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

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

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

    #ib_16384_0.dblwr
    #ib_16384_1.dblwr

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

  • innodb_doublewrite_pages

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

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