mysql数据库innodb体系结构(一、内存结构 与二、物理存储结构)



InnoDB存储引擎结构图

在这里插入图片描述

innoDB体系结构

在这里插入图片描述

一、内存结构

在这里插入图片描述

1.Buffer Pool

InnoDB专用缓存,用来缓存表对象的数据和索引信息的。

Buffer PoolInnoDB Dedicated cache used to cache table object data and index information.
大小由innodb_buffer_pool_size变量指定,默认为128MB。

The size is specified by the innodb_buffer_pool_size variable, which defaults to 128MB.
在独立的数据库服务器中,该缓存大小可以设置为物理内存的80%。
In a standalone database server, this cache size can be set to 80% of physical memory.

2.Change Pool

在这里插入图片描述

3.Log Buffer

在这里插入图片描述

在这里插入图片描述


二、物理存储结构

1.系统表空间

系统表空间
默认情况下InnoDB引擎只对应一个表空间,即系统表空间,所有InnoDB引擎表的数据(含索引)都存

储在该表空间中注意仅仅是保存数据和索引,表对象的结构信息仍保存在.frm文件中

InnoDB系统表空间对应哪些物理数据文件,通过系统变量 innodb_data_file_path 指定,其语法:

innodb_data_file_path = file_name:file_size[:autoextend[:max:max_file_size]]

在这里插入图片描述


2.独立表空间

默认的情况下,InnoDB引擎的表和索引都保存在系统表空间对应的数据文件中当数据量很大的时 候,管理成本就会上升。系统表空间的数据文件扩展后无法回缩,即使表被DROP或TRUNCATE,甚
至该表空间内实际已经没有任何数据,已分配的空间仍然仅是相对于InnoDB数据可用,而不能被操作系统再分配给其他文件使用。

针对这种情况,可以考虑应用InnoDB数据存储的另一项设定,InnoDB将其定义为多重表空间(multiple tablespaces),就是每个表对象拥有一个独享的.ibd为扩展名的数据文件,这个文件就是一个独立的表空间。

是否启用多重表空间是由系统变量 innodb_file_per_table 控制。

独立表空间优点:

1、各表对象的数据独立存储至不同的文件,可以更灵活地分散I/O、执行备份及恢复操作

2、当执行TRUNCATE/DROP删除表对象时,空间可以即时释放回操作系统层


3.Redo日志

1、redo 日志

redo 日志存储结构

redo日志仅针对InnoDB引擎,MySQL数据库的其他引擎是用不到的。默认情况下,InnoDB引擎会创

建两组大小均为5MB的日志文件,分别命名为ib_logfile0和ib_logfile1,日志文件保存在datadir变量指

定的路径下。不过可以通过InnoDB的专用参数修改日志路径、日志文件大小以及日志文件组的数量:

innodb_log_group_home_dir
innodb_log_file_size
innodb_log_files_in_group

redo 在事务中的应用

Redo的作用:
redo 来实现事务持久性,redo 对于AC也有相应的作用

持久性相关组件:
1.重做日志缓存(redo log buffer) ,是易失的
2.重做日志文件(redo log file),是持久的

持久性原理:
当事务提交(Commit)时,会刷新当前事务的redo buffer到重做日志文件中进行持久化,待事务的commit完成才算完成(会将此日志打上commit标记)。还会顺便将一部分redo buffer中没有提交的事务日志也刷新到redo日志文件中。

4.Undo日志

1、undo 日志

undo日志的作用:

对于事务操作来说,有提交就必然会有回滚,提交前面已经提到,就是确定保存写入的数据

那么回滚就要麻烦一些,因为它代表着两步操作:首先撤销刚刚做的修改,而后将数据恢复至修改前

的状态。那么,数据一经写入,怎么恢复到修改前的状态呢?最简单的方式,**就是在修改前先将旧数据保存下来,保存下的这部分数据就是UNDO日志,存储在系统分配好的 回滚段中

提交:确保提交的数据被保存
回滚的两步曲:一,撤销刚刚做的修改,二、第一步骤的基础上将数据恢复至修改前

回滚段中的UNDO日志分为两种:

1、insert UNDO : 仅在事务回滚时需要,事务提交后即可被废弃

2、update UNDO : 用于构造一致性读,当没有任何事务需要用到行记录的之前版本时才会被废弃。

考虑到InnoDB的回滚段,一致性读这类特性,建议事务尽早提交,不要长期持有。因为长事务可能会造成回滚段过大,占满整个系统表空间,从而拖累整个InnoDB引擎的运行。


UNDO 日志存储结构

默认情况,UNDO日志存储在系统表空间。从MySQL5.6版本开始,InnoDB引擎中的UNDO日志可以单独设置表空间,即UNDO表空间。想要使用独立的UNDO表空间,只需设置下面三个参数即可:
1、innodb_undo_directory :指定单独存放undo表空间的目录,默认为datadir。MySQL5.7只支持初始化设置,不可中途开启

2、innodb_rollback_segments :回滚段的数量, 至少大于等于35,默认128

3、innodb_undo_tablespaces :指定单独存放的undo表空间个数。必须在mysql初始化阶段设置,初始化完成后就不能再修改

Truncating Undo Tablespaces

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值