innodb存储引擎中一条sql写入的详细流程
第0步:会先去看缓冲区有没有这条数据,如果有就不进行缓存,直接进入第三步。 第1步:会将要修改的那一行数据所在的一整页加载到缓冲池Buffer Pool中 第2步:将旧值写入undo日志中,便于回滚以及mvcc机制的运作 第3步:将Buffer Pool中的数据更新为新的数据。 第4步:写入redo日志缓冲池,redo日志的内容实际和binlog差不多,但是作用不同 // 这一步之前都是在缓存中进行的,十分的高效。下面的需要和磁盘交互了。 至于什么时候刷新buffer log到redo log日志,有innodb_flush_log_at_trx_commit参数可以控制 同时innodb写入磁盘用了两段提交。具体可看:MySQL两阶段提交 第5步:准备提交事务前,将redo日志写入磁盘 第6步:准备提交日志前,将binlog日志写入磁盘 第7步:将commit标记写到redo日志中,事务提交完成。该操作时为了保证事务提交后redo和binlog数据一致性 第8步:将缓冲区的数据写入磁盘,注意这里的写入不是及时写入的,而是随机的。标签:MySQL,写入,提交,SQL,磁盘,日志,redo From: https://www.cnblogs.com/wenbochang/p/16723545.html