MySQL:31 MySQL数据库的日志顺序读写以及数据文件随机读写的原理
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL:31 MySQL数据库的日志顺序读写以及数据文件随机读写的原理相关的知识,希望对你有一定的参考价值。
1.mysql数据库和底层的操作系统之间的交互原理
MySQL在实际工作时候的两种数据读写机制,一种是对 redo log、binlog这种日志进行的磁盘顺序读写,一种是对表空间的磁盘文件里的数据页进行的磁盘随机读写。
2.磁盘随机读写操作
磁盘随机读操作
MySQL在工作的时候,尤其是执行增删改操作的时候,肯定会先从表空间的磁盘文件里读取数据页出来,这个过程就是典型的磁盘随机读操作。
在上图中,有一个磁盘文件,里面有很多的数据页,因为要读取的这个数据页可能在磁盘的任意一个位置,所以在读取磁盘里的数据页的时候只能用随机读的方式。这就是磁盘随机读。
磁盘随机读的性能问题
磁盘随机读的性能是比较差的,所以不可能每次更新数据都进行磁盘随机读,必须是读取一个数据页之后放到Buffer Pool的缓存里去,下次要更新的时候直接更新Buffer Pool里的缓存页。
频繁随机读写造成的性能问题 -- IOPS、响应延迟
所谓IOPS,就是底层的存储系统每秒可以执行多少次的磁盘读写操作,比如底层磁盘支持每秒执行1000个磁盘随机读写操作和每秒200个磁盘随机读写操作,对数据库的性能影响是非常大的。
IOPS指标对数据库的CRUD操作的QPS影响是非常大的,它几乎决定了数据库每秒能执行多少SQL语句,底层存储的IOPS越高,数据库的并发能力就越高。
磁盘随机读写的响应延迟,也会对数据库的性能造成很大的影响。假设底层磁盘支持每秒执行200个随机读写操作,那么每个操作是耗费10ms完成,还是耗费1ms完成,这 在一定程度上决定了数据库执行的单个CRUD SQL语句的性能。
一般对于核心业务的数据库的生产环境机器规划,都是推荐使用SSD固态硬盘的,而不是机械硬盘,因为SSD固态硬盘的随机读写并发能力和响应延迟要比机械硬盘好的多,可以大幅度提升数据库的QPS和性能。
3.磁盘顺序读写
磁盘顺序读写,在Buffer Pool的缓存页里更新了数据之后,必须要写一条redo log日志,这条 redo log 日志,就是走的顺序写。
所谓顺序写,就是说在一个磁盘日志文件里,一直在末尾追加日志。
如上图所示,写redo log日志的时候,其实是不断的在一个日志文件末尾追加日志的,这就是磁盘顺序写。
磁盘顺序写的性能几乎跟内存随机读写的性能差不多,并且在数据库里用了os cache机制,redo log顺序写入磁盘之前,先是进入 os cache,也就是操作系统的内存缓存里。
对写磁盘日志文件来说,磁盘每秒读写多少数据量的吞吐量指标,也就是说每秒可以写入磁盘100MB数据和写入磁盘200MB数据,对数据库的并发能力影响很大。
4.总结
数据库的每一次更新SQL语句,会涉及到多个磁盘随机读取数据页的操作,也会涉及到一条 redo log日志文件顺序写的操作。所以磁盘读写的IOPS指标,就是每秒可以执行多少个随机读写操作,以及每秒可以读写磁盘的数据量的吞吐量指标,就是每秒可以写入多少 redo log 日志,整体决定了数据库的并发能力和性能。
以上是关于MySQL:31 MySQL数据库的日志顺序读写以及数据文件随机读写的原理的主要内容,如果未能解决你的问题,请参考以下文章