写点什么

营销 MM 让我讲 MySQL 日志顺序读写及数据文件随机读写原理

  • 2022 年 2 月 09 日
  • 本文字数:1091 字

    阅读完需:约 4 分钟

摘要:你知道吗,MySQL 在实际工作时候的两种数据读写机制?

 

本文分享自华为云社区《MySQL日志顺序读写及数据文件随机读写原理》,作者:JavaEdge 。

 

MySQL 在实际工作时候的两种数据读写机制:

  • 对 redo log、binlog 这种日志进行的磁盘顺序读写

  • 对表空间的磁盘文件里的数据页进行的磁盘随机读写

1 磁盘随机读

 

MySQL 执行增删改操作时,先从表空间的磁盘文件里读数据页出来, 这就是磁盘随机读。

如下图有个磁盘文件,里面有很多数据页,可能需要在一个随机位置读取一个数据页到缓存,这就是磁盘随机读

 

 

因你要读取的这个数据页,可能在磁盘的任一位置,所以你在读取磁盘里的数据页时,只能用随机读。磁盘随机读性能极差,所以不可能每次更新数据都磁盘随机读,而是读取一个数据页之后,放到 BP 的缓存,下次要更新时,直接更新 BP 里的缓存页。

磁盘随机读的性能指标

IOPS

 

底层的存储系统可执行多少次磁盘读写操作/s。压测时可以观察一下。对数据库的 crud 操作的 QPS 影响非常大,某种程度上几乎决定了你每秒能执行多少个 SQL 语句,底层存储的 IOPS 越高,你的数据库的并发能力就越高。

磁盘随机读写操作的响应延迟

 

也是对数据库的性能有很大的影响。

 

假设你的底层磁盘支持你执行 200 个随机读写操作/s,但每个操作是耗费 10ms,还是耗费 1ms,也有很大影响, 决定你对数据库执行的单个 crud SQL 语句的性能。

 

包括你磁盘日志文件的顺序读写的响应延迟,也决定 DB 性能,因为你写 redo log 日志文件越快,那你的 SQL 性能越高。

 

比如你一个 SQL 语句发过去,磁盘要执行随机读操作加载多个数据页,此时每个磁盘随机读响应时间 50ms,可能 SQL 语句要执行几百 ms,但若每个磁盘随机读仅耗 10ms,可能你的 SQL 就执行 100ms 即可。所以核心业务的数据库的生产环境机器推荐 SSD,其随机读写并发能力和响应延迟要比机械硬盘好太多,可大幅提升数据库的 QPS 和性能。

2 磁盘顺序读写

 

当你在 BP 的缓存页里更新数据后,必须要写条 redo log 日志,它就是顺序写:在一个磁盘日志文件里,一直在末尾追加日志

 

 

写 redo log 时,不停的在一个日志文件末尾追加日志的,这就是磁盘顺序写。

 

磁盘顺序写的性能很高,几乎和内存随机读写的性能差不多,尤其是在 DB 里也用了 os cache 机制,就是 redo log 顺序写入磁盘之前,先是进入 os cache,即 os 管理的内存缓存。

 

对写磁盘日志文件,最关注

磁盘每 s 读写数据量的吞吐量指标

即每 s 可写入多少 redo log 日志,整体决定 DB 的并发能力和性能。

每 s 可写入磁盘 100M 数据和每 s 可写入磁盘 200M 数据,对数据库的并发能力影响也大。因为数据库的每次更新 SQL,都涉及:

  • 多个磁盘随机读取数据页操作

  • 一条 redo log 日志文件顺序写操作

 

点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理