MySQL之InnoDB存储引擎

MySQL之InnoDB存储引擎MySQL 之 InnoDB 存储引擎

1.逻辑存储结构

下图是InnoDB的逻辑存储结构

MySQL之InnoDB存储引擎

2.架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用广泛。下图是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。

MySQL之InnoDB存储引擎

2.1、内存结构

①Buffer pool:在执行增删改查操作时,先操作缓冲池中的数据,(缓冲池没有数据,再去磁盘加载并缓存在缓冲池中),然后再以一定的频率刷新到磁盘中,减少磁盘IO,加快处理速度。

缓冲池以page为单位,底层采用链表数据结构管理page。

②change buffer:更改缓冲区(针对非唯一的二级索引页)。在执行DML语句时,如果数据不存在于Buffer pool,就把数据从磁盘加载到更改缓冲区,在更改缓冲区完成操作后,以一定的频率刷新到Buffer pool,再由Buffer pool刷新到磁盘。二级索引的DML操作是主键乱序插入的,频繁乱序的磁盘IO会大大减低处理速度,这就是change buffer存在的意义。

③Adaptive Hash Index:自适应hash索引,用于优化buffer pool数据的查询。

④log buffer:日志缓冲区。用来保存要写入磁盘的log日志(redo log、undo log),默认为16M,日志缓冲区的日志会定期刷新到磁盘。可以通过增加日志缓冲区的大小来减少磁盘IO。

参数:

innodb_log_buffer_size:缓冲区大小 

innodb_flush_log_at_trx_commit:刷新日志时机(0:每次事务提交时刷新到磁盘;1:每秒刷新到磁盘;2:日志在每次事务提交后写入,并每秒刷新到磁盘)。

2.2、磁盘结构

①system tablespace:系统表空间是更改缓冲区的存储区域。

②file-per-table tablespace:每个表的文件表空间。每一张表都会生成一个独立的表空间文件。

③general tablespaces:通用表空间,默认不存在,但可以手动创建,手动指定关联。

④doublewrite buffer files:双写缓冲区。InnoDB引擎将数据页从buffer pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。

⑤undo tablespace:撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(大小默认16M),用于存储undo log。

⑥temporary tablespaces:临时表空间,用于存放临时表等数据。

⑦redo log:重做日志,用来实现事务的持久性。当事务提交之后,会把所有修改信息都存到该日志中,用于在刷新脏页到磁盘发生错误时,进行数据恢复使用。

2.3、后台线程

MySQL之InnoDB存储引擎

3.事务原理

3.1、redo log

重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性。

MySQL之InnoDB存储引擎

3.2、undo log

MySQL之InnoDB存储引擎

原子性:undo log

持久性:redo log

一致性:undo log +redo log

隔离性:锁+MVCC

4.MVCC

基本概念:

MySQL之InnoDB存储引擎

 三个隐藏字段:

MySQL之InnoDB存储引擎

undo log版本链 :

DB_TRX_ID:事务ID(自增)。

DB_ROLL_PTR:回滚指针(指向前一个事务的地址)。

MySQL之InnoDB存储引擎

readview :MySQL之InnoDB存储引擎

 MySQL之InnoDB存储引擎

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233061.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中instanceof关键字的理解「建议收藏」

    Java中instanceof关键字的理解「建议收藏」Java中instanceof关键字的理解

    2022年4月23日
    56
  • modis数据命名规则

    modis数据命名规则1. MOD是Terra星数据—-上午星;MYD是Aqua星数据—-下午星。2. Terra卫星原始数据命名规则>>>15位  A20040707140331.down                  A定义为Terra卫星;YYYY-MM-DD-HH-MM-SS(年-月-日-时-分-秒)

    2022年5月30日
    138
  • 完全理解icmp协议

    完全理解icmp协议1.ICMP出现的原因在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP报文。在IP网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP协议是为了辅助IP…

    2022年7月12日
    25
  • 2022保密教育线上培训考试 01[通俗易懂]

    2022保密教育线上培训考试 01[通俗易懂]试题1单选题1.机关、单位应当严格按照经过批准的范围对外提供涉密资料,并与外方签订(),限定涉密资料的使用和知悉范围。正确答案:B.保密协议2.按照公职人员政务处分法有关规定,有()行为造成不良后果或者影响的,予以警告、记过或者记大过;情节较重的,予以降级或者撤职;情节严重的,予以开除。正确答案:D.以上都正确3.下列关于涉密载体销毁的说法错误的是()。正确答案:B.涉密载体销毁的登记、审批记录无须保存4.保密期限是对国家秘密采取保密措施的时间要求。保密期限包括的形式有()。正

    2022年10月1日
    3
  • EXTJS 教程目录

    EXTJS 教程目录  本人开发extjs有两三个月了,做了三个左右的项目,其中后台都是用它来完成的。现在想借此机会整理一下用extjs开发的一些思维。  其实本人并没有完全地看过一本extjs的书籍,只是在开发过程中遇到什么问题就去百度什么。结果到现在开发时基本的东西都记不住,每次都是从旧项目中拷贝要用的东西出来,结果效率很慢。ps:以下教程都是采用extjs3.4都编写的  言归正传,以下的目录…

    2022年6月21日
    25
  • ajax用法示例_json.tojavaobject

    ajax用法示例_json.tojavaobject这次给大家带来Ajax与$.ajax实例详解,Ajax与$.ajax使用的注意事项有哪些,下面就是实战案例,一起来看一下。实例一(Ajax请求基本创建格式):Ajax练习(GET,不考虑浏览器兼容性)functiondoRequest(){//不考虑浏览器兼容性问题varxmlHttp=newXMLHttpRequest();//打开一个与Http服务器的连接xmlHttp.open(…

    2022年8月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号