從資料庫層面理解:隨機 I/O & 順序 I/O
通常、我們把 <=16KB 的I/O認為是小I/O、而 >=32KB 的I/O認為是大I/O 瞭解I/O的大小、影響到後期對快取、RAID型別、LUN的一些屬性的調優 當前大多數資料庫使用的都是傳統的機械磁碟 因此、整個系統設計要儘可能順序I/O 避免昂貴的尋道時間和旋轉延遲的開銷 隨機小I/O消耗比順序大I/O更多的處理資源 隨機小I/O更在意系統處理I/O的數量、即IOPS、比如、OLTP 而順序大I/O則更在意頻寬、即MB/s、比如、OLAP 因此、如果系統承載了多種不同的應用 必須瞭解它們各自的需求、是對IOPS有要求、還是對頻寬有要求
傳統機械磁碟最大的問題在於讀寫磁頭
讀寫磁頭的存在可以讓磁碟既能順序I/O、也可隨機I/O
但是、隨機I/O需要花費昂貴的磁頭旋轉和定位來查詢
因此、順序IO訪問的速度遠遠快於隨機IO
資料庫的很多設計也都是儘量充分利用順序IO、比如Oracle REDO LOG寫便是順序IO
如果、資料庫伺服器同時使用順序和隨機I/O、隨機I/O從快取中受益最多 原因有 3 : ① 順序I/O一般只需掃描一次資料、所以、快取對它用處不大 ② 順序I/O比隨機I/O快 ③ 隨機I/O通常只要查詢特定的行、但I/O的粒度是頁級的、其中大部分是浪費的 而、順序I/O所讀取的資料、通常發生在想要的資料塊上的所有行 更加符合成本效益 所以、快取隨機I/O可以節省更多的workload 傳統的資料庫架構對隨機IO幾乎沒有還手之力、隨機IO幾乎令所有DBA談虎色變 而聰明如MySQL InnoDB 則利用事務日誌把隨機I/O轉成順序I/O 如果能負擔得起、增加記憶體是解決隨機I/O最好的辦法