InnoDB
盡可能使用非同步磁碟 I/O,方法是建立許多執行緒來處理 I/O 作業,同時允許其他資料庫作業在 I/O 仍在進行時繼續執行。在 Linux 和 Windows 平台上,InnoDB
使用可用的作業系統和程式庫函式來執行「原生」非同步 I/O。在其他平台上,InnoDB
仍然使用 I/O 執行緒,但這些執行緒實際上可能會等待 I/O 請求完成;此技術稱為「模擬」非同步 I/O。
如果 InnoDB
可以判斷資料很可能很快就會需要,它會執行預讀作業,將該資料帶入緩衝池中,使其可在記憶體中使用。對於連續資料發出幾個大型讀取請求可能比發出幾個小型、分散的請求更有效率。InnoDB
中有兩種預讀啟發式方法
在循序預讀中,如果
InnoDB
注意到對表格空間中某個區段的存取模式是循序的,它會提前將一批資料庫頁面的讀取發佈到 I/O 系統。在隨機預讀中,如果
InnoDB
注意到表格空間中的某些區域似乎正在完全讀入緩衝池,它會將剩餘的讀取發佈到 I/O 系統。
如需設定預讀啟發式方法的資訊,請參閱第 17.8.3.4 節,「設定 InnoDB 緩衝池預取(預讀)」。
InnoDB
使用一種新的檔案刷新技術,其中涉及一種稱為雙寫緩衝區的結構,在大多數情況下預設為啟用 (innodb_doublewrite=ON
)。它可以提高意外退出或斷電後復原的安全性,並透過減少 fsync()
作業的需求,提高大多數 Unix 變體的效能。
在將頁面寫入資料檔案之前,InnoDB
會先將它們寫入稱為雙寫緩衝區的儲存區域。只有在寫入和刷新到雙寫緩衝區完成後,InnoDB
才會將頁面寫入資料檔案中的正確位置。如果作業系統、儲存子系統或意外的 mysqld 處理程序在頁面寫入過程中退出(導致損毀頁面狀況),InnoDB
稍後可以在復原期間從雙寫緩衝區中找到頁面的良好副本。
如需有關雙寫緩衝區的詳細資訊,請參閱第 17.6.4 節,「雙寫緩衝區」。