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

摘要:你知道吗,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日志文件顺序写操作

 

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

推荐这些文章:

服务器磁盘爆满如何清理MySQL日志?

前言
服务器爆满,清理MySQL的日志可以立马释放空间,本文对常用日志清理做了详细的阐述
🚀 1.错误日志
错误日志对 mysql的启动、运行、关闭过程进行了记录, MySQL DBA 在遇到问题时候,第一时间应该查看这个错误日志文件, 该文件不但记录了出错信息,还记录了一些警告信息以及正确信息, 这个 error 日志文件类似于 oracle 的 alert 文件。 可以通过“show variables like ‘log_error’;”命令查看错误日志的路径

🌈 1.1 配置方法

默认是启动的,一般以err做后缀名,需要在参数文件中配置 先找到参数文件 log_error = ...

kafka高效读写数据

1)Kafka 本身是分布式集群,可以采用分区技术,并行度高 2)读数据采用稀疏索引,可以快速定位要消费的数据 3)顺序写磁盘:Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端, 为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这 与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。4)页缓存 + 零拷贝技术

 
 

总结:以上就是Kafka为啥快的原因。
 

郭慕荣博客园

...

五、SQL语言4 日志

1.日志分类
  错误日志error log
    启动,停止,关闭失败报错。  rpm安装日志位置/var/log/mysqld.log
  通用查询日志general query log
    所有的查询都记下来
  二进制日志binary log
    实现备份,增量备份。只记录改变数据,除了select都记。
  中继日志relay log
    读取主服务器的binlog,在本例回放。保持一致。
  慢查询日志slow query log
    指导调优,定义某一个查询语句,定义超时时间,通过日志提供调优建议给开发人员。
  定义语句的日志DDL log
 
2...

往数据库存date数据

Dataformat form1 = new SimpleDateFormat("yyyy-MM-dd");
String birday = req.getParameter("birthday");
Date date = form1.parse(birday);

  把String类型的改成date类型

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(date));
...

【MYSQL】一条sql的执行过程

【MYSQL】一条sql的执行过程   
1、SQL接口,负责接收处理收到的SQL语句。
2、查询解析器,负责对SQL语句进行解析,让MySQL能看懂SQL语句,按照SQL语法解析出这条SQL要干啥。
3、查询优化器,选择最优的查询路径,指定执行计划(全表扫描还是走索引)
4、调用存储引擎接口真正开始执行SQL语句。
  存储引擎就是用来执行SQL的,在MySQL中,SQL接口、SQL解析器、查询优化器都是通用的,但是存储引擎不是,可以选择不同的存储引擎来执行SQL,一般用InnoDB。
  
  InnoDB存储引擎中有一个非常重要的组件叫缓冲池(buffer pool) 。如当...

MySQL事务一致性的实现方式:redo log(重做日志)

redo日志是什么:WAL(Write-ahead logging,预写式日志)

所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含redo和undo两部分信息。
如果一个系统直接将变更应用到系统状态中,那么在机器掉电重启之后系统需要知道操作是成功了,还是只有部分成功或者是失败了(为了恢复状态)。如果使用了WAL,那么在重启之后系统可以通过比较日志和系统状态来决定是继续完成操作还是撤销操作。

redo日志的作用

物理层面看,这些日志都指明了对哪个表空间的哪个页进行了修改。
逻辑层面看,在系统崩溃重启时,并不能直接根据这些日志里的记载,将页面内的某个偏移量处恢复成某个数据,而是...

golang log类记录日志和输出

osFile, err := os.OpenFile("log.txt", os.O_WRONLY|os.O_CREATE, 0755)
if err != nil {
log.Fatalf("create file log.txt failed: %v", err)
}

logger := log.New(io.MultiWriter( os.Stdout, osFile), "", log.Lshortfile|log.LstdFlags)
logger.Printf("hello")

参考文章:
https://zhuanlan.z...

文章标题:营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理
文章链接:https://www.dianjilingqu.com/51358.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>