InnoDB存储引擎中的表空间详解

 更新时间:2023年09月11日 11:17:05   作者:silmeweed  
这篇文章主要介绍了InnoDB存储引擎中的表空间详解,表空间内部,所有页按照区extent为物理单元进行划分和管理,extent由64个物理连续的页组成,表空间可以理解为由一个个物理相邻的extent组成,需要的朋友可以参考下

一、InnoDB体系结构:

二、表空间文件:

  • system tablespace(系统表空间)(ibdata1...ibdataN文件) 
  • file-per-table tablespace(单表表空间)(.ibd表空间文件)
  • general tablespace(通用表空间):  (5.7版本引入在满足一定约束条件下,可以将多个表创建到同一个文件中)
  • temporary tablespace: 临时表空间文件用于存储所有非压缩的临时表,第1~32个临时表专用的回滚段也存放在该文件中(itbmp1)。
  • undo tablespaces: 由innodb_undo_tablespaces配置。默认情况下,该值为0,即undo数据是存储在ibdata中。
  • redo log: 在所有数据变更前,先写redo日志(ib_logfile0,ib_logfile1)。

只有system tablespace和temporary tablespace是共享的,其它是非共享的tablespace。

表空间内部,所有页按照区(extent)为物理单元进行划分和管理。extent由64个物理连续的页组成,表空间可以理解为由一个个物理相邻的extent组成。

2.1 Table Space ID 分布

  • 0x0 : SYSTEM_TABLE_SPACE
  • 0x1 ~ 0xFFF9E108: USER SPACE 0xFFF9E
  • 108 ~ 0xFFFFFB88: session temp table
  • 0xFFFFFF70 ~ 0xFFFFFFEF: undo tablespace ID
  • 0xFFFFFFF0: redo log pseudo-tablespace
  • 0xFFFFFFF1: checkpoint file space
  • 0xFFFFFFFD: innodb_temporary tablespace
  • 0xFFFFFFFE: data dictionary tablespace
  • 0xFFFFFFFF : invalid space

系统表空间ibdata虽然包括不同文件ibdata1, ibdata2…,但这些文件逻辑上是相连的,这些文件同属于space_id为0的表空间。用户创建表产生的ibd文件,则认为是一个独立的tablespace,只包含一个文件。

2.2 tablespace相关设置

#1.DATA STORAGE
datadir=/var/lib/mysql 
#2.InnoDB Configuration 
innodb_file_per_table=1
#3.InnoDB Memory 
innodb_buffer_pool_size = 2000M
#4.System Tablespace configuration
innodb_data_file_path= ibdata1:512M;ibdata2:512M:autoextend
#5.Redo log and buffer configuration
innodb-log-files-in-group=3
innodb_log_file_size=100M
innodb_log_buffer_size=30M
#5.InnoDB file formate 
innodb_file_format = Barracuda
#6.UNDO Tablespace Configuration 
innodb_undo_directory = /var/lib/mysql/ 
innodb_undo_tablespaces = 3 
innodb_undo_logs = 128 
innodb_undo_log_truncate = ON 
innodb_rollback_segments = 128
#7.Temp Tablespace Configuration 
tmpdir = /var/lib/mysql/ 
innodb_temp_data_file_path = ibtmp1:20M:autoextend 
#8.tablespace 数据加密插件,在Enterprise版本中提供 #Keyring configuration 
early-plugin-load=keyring_file.so 
keyring_file_data=/var/lib/mysql-keyring/keyring

2.3 The System Tablespace(系统表空间)

  • 数据字典:  各表的元数据(表结构,索引,列信息等)
  • 变更缓冲区:(IBUF bitmap)
  • 双写缓冲区:(double write)
  • 撤销日志undo:(如果自定义了UNDO表空间,在系统表空间的UNDO log也就会失效)
  • 表数据(索引数据),(末开始独享表空间或指定保存到系统表空间)
  • 一个或多个文件ibdataN:文件的大小和数量配置控制:innodb_data_file_path=ibdata1:500M:ibdata2:12M:autoextend:max:500M
# innochecksum --page-type-summary ibdata1 
File::ibdata1
================PAGE TYPE SUMMARY==============
#PAGE_COUNT     PAGE_TYPE
===============================================
  349391        Index page                        5.25%
 6076813        Undo log page                    91.29%
   18349        Inode page                        0.28%
  174659        Insert buffer free list page      2.62%
   36639        Freshly allocated page            0.55%
     405        Insert buffer bitmap              0.01%
      98        System page
       1        Transaction system page
       1        File Space Header
     404        Extent descriptor page            0.01%
       0        BLOB page
       8        Compressed BLOB page
       0        Other type of page
-------------------------------------------------------
 6656768        Pages total                     100.00%
===============================================
Additional information:
Undo page type: 3428 insert, 6073385 update, 0 other
Undo page state: 1 active, 67 cached, 249 to_free, 1581634 to_purge, 0 prepared, 4494862 other

2.4 File-Per-Table Tablespaces(单表表空间 )  

  •  每个表都存储在自己的表空间数据文件(.ibd文件)中。(由innodb_file_per_table配置选项控制,默认情况下该选项是开启的)。
  • 用户创建表产生的ibd文件,则认为是一个独立的tablespace,只包含一个文件。
  • 除了数据页、索引页外,文件中还包含了多种管理页。

2.5 Undo tablespace

UNDO表空间用于存放一个或多个UNDO log文件。UNDO通过保留活动事务(MVCC)的已修改未提交数据来保证读一致性。 从此存储区域检索未修改的数据。UNDO log也称为回滚段。默认情况下,UNDO表空间是系统表空间的一部分,当然从MySQL5.6开始也允许用户自定义一个UNDO表空间,需要注意的是:

  • 如果自定义了UNDO表空间,在系统表空间的UNDO log也就会失效
  • 这一配置需要在MySQL初始化之前完成
  • 可以truncate但不能drop,如果要使用truncate的话则UNDO表空间必须已经独立于系统表空间
  • 默认大小10M
  • 相关参数
innodb_undo_tablespace : Number of undo tablespaces, default 0 , max 95 
innodb_undo_directory : Location for undo tablespace,default is data_dir with 10MB initial size.
innodb_undo_logs : Number of undo logs in a single undo tablespace, default and max value is ‘128' [ Deprecated in 5.7.19 , innodb_rollback_segments variable will control this]    
innodb_undo_log_truncate: truncate undo tablespace, Default OFF  

2.6 Temporary tablespace

保存和检索临时表已修改未提交的数据和相关的对象,始于MySQL5.7.2,server运行时用于回滚临时表的修改。

  • 临时表的UNDO log存在于临时表空间
  • server启动时,默认的临时表空间文件ibtmp1会被重新创建
  • 优点:临时表的REDO log I/O被消除,性能得以提升
  • 相关参数 innodb_temp_data_file_path = ibtmp1:12M:autoextend (default)

2.7 General tablespace

用户定义表空间,用户可以用CREATE TABLESPACE的语法来创建自定义的表空间,并在创建表的时候指定该表所属的表空间。优点:

  • 比innodb_file_per_table更有存储上(Memory)的优势
  • 支持Antelope和Barracuda文件格式
  • 支持所有行格式以及相关特性
  • 支持在非数据目录的目录下创建
  • NOTE: tablespace名是大小写敏感的

到此这篇关于InnoDB存储引擎中的表空间详解的文章就介绍到这了,更多相关InnoDB表空间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL的23个需要注意的地方

    MySQL的23个需要注意的地方

    本文将为大家介绍的是MySQL数据库的23个特别注意事项,希望各位DBA能从中得到一些启发。
    2010-08-08
  • mysql学习笔记之帮助文档

    mysql学习笔记之帮助文档

    本文给大家详细讲述的是mysql的help(帮助)命令的用法,非常细致,有需要的小伙伴可以来参考下
    2017-02-02
  • Mysql迁移到TiDB双写数据库兜底方案详解

    Mysql迁移到TiDB双写数据库兜底方案详解

    这篇文章主要为大家介绍了Mysql迁移到TiDB双写数据库兜底方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • ubuntu kylin 14.10下多个mysql 5.7.14安装教程

    ubuntu kylin 14.10下多个mysql 5.7.14安装教程

    这篇文章主要为大家分享了ubuntu kylin 14.10下多个mysql 5.7.14安装教程,感兴趣的朋友可以参考一下
    2016-08-08
  • CentOS7中安装MySQL的图文讲解

    CentOS7中安装MySQL的图文讲解

    这篇文章主要介绍了CentOS7中安装MySQL的图文讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MySQL中any、some和all的用法实例

    MySQL中any、some和all的用法实例

    最近一直在练习MYSQL的多表查询,基本上每个查询语句我都会写至少两次,下面这篇文章主要给大家介绍了关于MySQL中any、some和all用法的相关资料,需要的朋友可以参考下
    2022-11-11
  • mysql中Update未加索引导致的微服务模块不可用

    mysql中Update未加索引导致的微服务模块不可用

    本文主要介绍了mysql中Update未加索引导致的微服务模块不可用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 一篇文章学会SQL中的递归用法(Mysql)

    一篇文章学会SQL中的递归用法(Mysql)

    这篇文章主要给大家介绍了关于如何一篇文章学会SQL中的递归用法,众所周知目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的,需要的朋友可以参考下
    2023-10-10
  • MySQL之导出整个及单个表数据的操作

    MySQL之导出整个及单个表数据的操作

    这篇文章主要介绍了MySQL之导出整个及单个表数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • MYSQL where 1=1判定中的作用说明

    MYSQL where 1=1判定中的作用说明

    最近看到很多sql里用到where 1=1,原来觉得这没用嘛,但是又想到如果没用为什么要写呢?
    2011-09-09

最新评论