(1)磁盘随机读: 磁盘文件加载到buffer pool 的过程
    简单来说,MySQL在工作的时候。尤其是执行增删改查操作的时候,肯定会先从表空间的磁盘文件里读取数据页出来,这个过程其实就是典型的随机读操作。在磁盘文件的数据页里的某个位置需要在一个随机的位置读取一个数据页到缓存,这就是磁盘随机读。
    磁盘随机读的性能是比较差的,所以不可能每次更新数据都进行磁盘随机读,必须是读取一个数据页之后放到Buffer Pool的缓存里去,下次要更新的时候直接更新Buffer Pool里的缓存页。
    对于随机读来说,主要关注的性能指标是IOPS和响应延迟,IOPS:底层的存储系统每秒可以执行多少次磁盘读写操作,比如可以1000个,2000个随机磁盘读写操作,这些对数据库的性能影响其实非常大,在某种程序上这个指标几乎决定了你每秒能执行多少个SQL语句,底层存储的IOPS越高,数据库的并发能力就越高。

    1. 另一个就是随机读写磁盘操作的响应延迟,也对数据库的性能有很大的影响,假设你磁盘支持每秒执行200个随机读写操作,但是每个操作耗费10ms完成,还是1ms完成,这个对定了你对数据库执行的单个crud SQL语句的性能。比如你一个SQL发送过去,磁盘要执行随机读操作加载多个缓存页,每个磁盘随机读响应是50ms,那么你的SQL语句要执行几百ms,但是如果每个磁盘随机读仅仅耗费10ms,那么你的SQL语句就是100ms了。<br /> <br /> 所以一般对于核心业务的数据库生产环境机器规划,**都是推荐使用SSD固态硬盘,而不是机械硬盘**,SSD固态硬盘的随机读写并发能力和响应延迟比机械硬盘好的多。<br />![59051200_1583118569.jpg](https://cdn.nlark.com/yuque/0/2021/jpeg/232825/1630648964083-7333b3a6-f4ac-45e2-be6c-cc573d1cc4f2.jpeg#clientId=uf2430089-269c-4&from=ui&height=262&id=ub43b3c86&margin=%5Bobject%20Object%5D&name=59051200_1583118569.jpg&originHeight=524&originWidth=946&originalType=binary&ratio=1&size=129425&status=done&style=stroke&taskId=ue96b3e0c-eb24-4542-b7de-84e137f0c0d&width=473)

    (2)磁盘顺序写:InnoDB存储引擎中的日志文件的写入都是 顺序写
    写redo log日志的时候,其实就是不停的在一个日志文件末尾追加日志的,这就是磁盘顺序写,磁盘顺序写的性能其实是很高的,某种程度上来说,几乎可以跟内存随机读写的性能差不多,尤其在数据库里也用了os cache机制,就是redo log顺序写入磁盘之前,先是进入 os cache, 就是操作系统管理的内存缓存里。
    对于写日志磁盘文件,最核心关注的是磁盘每秒读写多少数据量的吞吐量指标,就是每秒可以写入磁盘100MB数据还是可以写入磁盘200MB数据,对数据库的并发能力影响很大。
    因为数据库的每一次更新SQL语句,都必然会涉及到多个磁盘随机读取数据页的操作,也会涉及到一条redo log日志文件顺序写的操作。所以磁盘读写的IOPS指标,就是每秒可以支持多少个随机读写操作,以及每秒可以读写磁盘的数据量的吞吐量指标,就是每秒可以写入多少个 redo log日志,整体决定了数据库并发能力和指标。
    包括你磁盘日志文件的顺序读写的响应延迟也决定了数据库的性能,因为你写redo log日志文件越快,你的执行SQL语句性能越高。
    38880800_1583118576.jpg