mysql存储引擎InnoDB插入数据的过程详解

本文详细探讨了MySQL InnoDB存储引擎在事务提交时的内部过程,包括日志缓冲、缓冲池、事务日志和双写缓冲的作用。通过日志缓冲和双写缓冲,InnoDB将随机IO转化为顺序IO,提高性能并确保数据完整性。即使在异常情况下,也能通过事务日志恢复数据。
摘要由CSDN通过智能技术生成

mysql是目前市面上应用非常广泛的关系型数据库.

当插入,更新,删除等sql语句运行后,mysql为何总能高效,快速的执行,而且不管是断电,mysql进程崩溃,还是一些其它非正常因素,mysql总能保持数据完整,

本文将带着这些问题探秘mysql底层默认存储引擎InnoDB(Mysql5.5之后)的执行过程.


问题: InnoDB事务提交后在底层都干了什么?

当提交一个事务时,实际上它干了如下2件事:

一:  InnoDB存储引擎把事务写入日志缓冲(log buffer),日志缓冲把事务刷新到事务日志.

二:  InnoDB存储引擎把事务写入缓冲池(Buffer pool).

做完上面2件事,整个事务提交就完成了.

InnoDB通过事务日志把随机IO变成顺序IO,这大大的提高了InnoDB写入时的性能.

因为把缓冲池的脏页数据刷新到磁盘可能会涉及大量随机IO,这些随机IO会非常慢,通过事务日志,避开随机IO,用顺序IO替代它.

但如果此时机器断电或者意外崩溃,那脏页数据没刷新到磁盘,岂不是数据会丢失? 

答案是否定的, mysql意外崩溃后,重启时.会根据事务日志重做事务,恢复所有buffer pool中丢失的脏页.

上面的过程是在未开启binlog的情况下的执行过程,binlog的基本配置如下: 

#【开启二进制日志】 
log_bin = mysql-bin
server_id = 2 
#【中继日志的位置和命名】 
relay_log = mysql-relay-bin
# 【允许备库将其重放的事件也记录到自身的二进制文件中】
log_slave_updates = 1
#【sync_binlog 实时刷新】
sync_binlog = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值