從資料庫層面理解:隨機 I/O & 順序 I/O

破棉襖發表於2015-05-08
談這倆概念前、先來說說 大I/O vs. 小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最好的辦法




原文: http://blog.itpub.net/26515977/viewspace-1208132/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1629657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章