@TOC
什么是順序IO和隨機IO
在這里插入圖片描述
順序IO是指讀寫操作的訪問地址連續。在順序IO訪問中,HDD所需的磁道搜索時間顯著減少,因為讀/寫磁頭可以以最小的移動訪問下一個塊。數據備份和日志記錄等業務是順序IO業務。
隨機IO是指讀寫操作時間連續,但訪問地址不連續,隨機分布在磁盤的地址空間中。產生隨機IO的業務有OLTP服務,SQL,即時消息服務等。
如何解決隨機IO造成的性能損失?
Mysql 數據最終都會刷到磁盤上去,刷盤分隨機IO和順序IO,兩者性能相差很大,大多情況下我們會改變一下設計使Mysql 的隨機IO變為順序IO來提高性能
給隨機IO添加緩存有更大的收益:
- 順序I/O一般只需掃描一次數據、所以、緩存對它用處不大(收益小,不是說沒用)
- 順序I/O比隨機I/O快
- 隨機I/O通常只要查找特定的行、但I/O的粒度是頁級的、其中大部分是浪費的、而順序I/O所讀取的數據、通常發生在想要的數據塊上的所有行。
問題
什么是IOPS?
IOPS(Input/OutputOperations Per Second)是一個用于計算機存儲設備(如硬盤(HDD)、固態硬盤(SSD)或存儲區域網絡(SAN))性能測試的量測方式,可以視為是每秒的讀寫次數。
機械硬盤和固態硬盤在隨機IO上性能的影響因素?
對于機械硬盤或是其他類似的機電存儲設備,其隨機存取IOPS主要和存儲設備的尋址時間有關,若是固態硬盤及其他固態電子設備,其隨機存取IOPS主要和存儲設備的內部控制器及記億體接口速度有關。這兩種設備的順序訪問IOPS(尤其是訪問大數據區塊)一般與包括存儲設備可以持續的最大帶寬有關。
SSD作為隨機存儲設備,其訪問任意一塊的時間應該是相等的,為什么順序IO還是快于隨機IO?
有多種原因導致了這種情況,一是SSD通常是主控芯片包含若干個通道,每個通道和若干閃存芯片相連,隨機IO并不能像順序IO那樣,由多塊芯片分擔且并行傳輸以獲得更高的性能,二是SSD有擦寫/垃圾回收等機制,隨機IO明顯會提高這些機制的難度和頻率,三是預讀和緩存等機制對順序IO會有更好的效果。 不過現在的SSD在多線程下的隨機IO吞吐量已經很接近順序IO了,但還是有一定的差距。