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

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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InnoDBMySQL 关系型数据库管理系统的一种存储引擎。它使用了一种称为"多版本并发控制"(MVCC)的技术来提供高性能和高并发性能。下面是 InnoDB 存储引擎的架构详解: 1. 缓冲池(Buffer Pool):InnoDB 使用了一个内存缓冲池来存储数据和索引。这个缓冲池是 InnoDB 存储引擎的关键组件,它用于减少磁盘 I/O 操作,提高性能。当数据被修改时,首先会被写入缓冲池中,然后再由后台线程将其刷新到磁盘。 2. 重做日志(Redo Log):InnoDB 使用了重做日志来保证事务的持久性。重做日志记录了对数据库进行的所有修改操作,包括插入、更新和删除操作。当系统崩溃或发生故障时,可以通过重做日志来恢复数据库的一致性。 3. 数据文件:InnoDB数据和索引存储数据文件中。每个表都有一个对应的数据文件,其中包含了表的数据和索引信息。InnoDB 支持自动扩展和自动收缩数据文件的功能。 4. 页(Page):InnoDB数据和索引分成固定大小的页来管理。默认情况下,一个页的大小为 16KB。每个页都有一个唯一的标识符,称为页号。InnoDB 使用这些页来存储数据和索引。 5. 事务管理:InnoDB 支持事务的 ACID 特性(原子性、一致性、隔离性和持久性)。它使用了多版本并发控制(MVCC)来实现高并发性能和数据一致性。 6. 锁机制:InnoDB 使用了行级锁来控制并发访问。这意味着多个事务可以同时读取同一张表的不同行,而不会相互阻塞。只有当多个事务尝试修改同一行时,才会发生冲突。 总的来说,InnoDB 存储引擎的架构设计旨在提供高性能、高并发性能和数据一致性。它通过缓冲池、重做日志、数据文件、页、事务管理和锁机制等组件来实现这些目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值