@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了,但还是有一定的差距。