Mysql
數據庫可以確認SSD中的順序讀取真的是順序的嗎
在 SSD 中,覆蓋數據文件意味著 SSD 必須先擦除它,然後再寫入數據。這可以更改數據文件在 SSD 中的數據佈局。
MySQL 有一些優化隨機 IO 的策略,例如預讀(預取)。如果順序讀取前面的 y 頁,則預讀策略將在“範圍”中預讀取剩餘的 x 頁。從 MySQL 的角度來看,使用連續的偏移量
pread
可以使讀取順序。但我懷疑SSD是否如此。換句話說,pread
只能確認邏輯順序而不是物理順序?這就引出了另一個重要的問題:MySQL 中的一個 extent(通常包含 64 個頁面)是否必須代表 SSD 的連續空間。
所以如果我是對的,為什麼數據庫仍然在將隨機 IO 轉換為順序 IO 方面做出巨大努力?
如今,在 DBMS 使用的數據文件和物理儲存設備塊之間至少有兩個抽象級別,通常更多。對讀者來說顯示為連續文件的內容在文件系統中不一定是連續的,即使它是連續的,也不一定是底層設備上的連續塊跨度。所以,不,數據庫不可能知道它的順序讀取實際上是多麼連續。
至於為什麼,首先,有歷史。當儲存架構更簡單時,DBMS 過去常常在更接近硬體的地方執行,通常與原始設備一起工作,在那裡它們可以精確控制數據文件頁面/塊的物理位置,並且可以保證 I/O 的順序性。
其次,嘗試順序讀取沒有害處。如果底層物理塊實際上是連續的,我們會從中獲得一些好處;如果沒有,好吧,至少我們嘗試過。