首页 > 其他分享 >innodb内部结构组成InnoDB-spaceID.PageNumber

innodb内部结构组成InnoDB-spaceID.PageNumber

时间:2024-10-10 22:46:57浏览次数:10  
标签:ibd SpaceID PageNumber spaceID 空间 innodb SIZE

17. InnoDB-spaceID.PageNumber

 

表空间内部组织结构

表空间
内部由多个段对象(Segment)组成
每个段(Segment)由区(Extent)组成
每个区(Extent)由页(Page)组成
每个页(Page)里面保存数据(或者叫记录 Row)

  1. 段对用户来说是透明的
  2. 段也是一个逻辑概念
  3. 目前为止在information_schema中无法找到段的概念
  4. 重点需要理解区(Extent)和页(Page)的概念

 

表空间-页

页的定义
  • 页是最小的I/O操作单位
    • data最小的单位不是页,而是页中的记录(Row)
  • 普通用户表中MySQL默认的每个页为16K
    • 从MySQL 5.6开始使用innodb_page_size可以控制页大小
    • 一旦数据库通过innodb_page_size创建完成,则后续无法更改
    • innodb_page_size是针对普通表的,压缩表不受其限制
如何定位到页
  • 每个表空间都对应一个SpaceID,而表空间又对应一个ibd文件,那么一个ibd文件页对应一个SpaceID
    • 因为表空间 <-> ibd文件,表空间 <-> SpaceID,所以ibd文件 <-> SpaceID
    • ibdata1对应的SpaceID为0
    • 每创建一个表空间(ibd文件),SpaceID自增长(全局)
  • PageNumber
    • 在一个表空间中,第几个16K的页(假设innodb_page_size = 16K)即为PageNumber

1. 可以通过( SpaceID , PageNumber )定位到某一个页
2. 在一个 SpaceID (ibd文件)中,PageNumber是唯一且自增的
3. 这里的区(extent)的概念已经弱化。在这个例子中,第一个区的PageNumber是(0~63)且这 64个页在物理上是连续的;第二个区的PageNumber是(64~127)且这64个页在物理上也是连续 的;但是(0~63)和(64~127)之间在物理上则不一定是连续的,因为区和区之间在物理上不一定是连续的。
4. 删除表的时候,SpaceID不会回收,SpaceID是全局自增长的。

root@mysqldb 13:22:  [information_schema]> select * from INNODB_TABLESPACES where space = 19\G
*************************** 1. row ***************************
          SPACE: 19
           NAME: gavin/test_index_2
           FLAG: 16417
     ROW_FORMAT: Dynamic
      PAGE_SIZE: 16384
  ZIP_PAGE_SIZE: 0
     SPACE_TYPE: Single    -- 独立表空间
  FS_BLOCK_SIZE: 4096
      FILE_SIZE: 147456
 ALLOCATED_SIZE: 147456
AUTOEXTEND_SIZE: 0
 SERVER_VERSION: 8.0.36
  SPACE_VERSION: 1
     ENCRYPTION: N
          STATE: normal
1 row in set (0.00 sec)

应用:

https://www.cnblogs.com/gavin-zheng/p/18122911

 

标签:ibd,SpaceID,PageNumber,spaceID,空间,innodb,SIZE
From: https://www.cnblogs.com/hsjz-xinyuan/p/18457345

相关文章

  • MySQL之innodb_flush_log_at_trx_commit和sync_binlog
    innodb_flush_log_at_trx_commit和sync_binlog两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数,它们的配置对于mysql性能有很大的影响一、innodb_flush_log_at_trx_commitinnodb_flush_log_at_trx_commit:是InnoDB引擎特有的,ib_logfile的刷新方式(ib_logfile:存放In......
  • InnoDB 和 MyISAM 的索引结构区别详解
    引言在MySQL中,索引是提升数据库查询性能的关键组成部分。通过索引,数据库可以快速定位记录,而无需扫描整个表的数据。MySQL中的两个常用存储引擎——InnoDB和MyISAM都提供了索引功能,但它们在底层的索引结构上有显著的区别。这些区别不仅影响性能,还影响事务支持、数据一......
  • 探索MySQL的InnoDB索引失效
    MySQL8+InnoDB- 序章索引失效,发生在已经建立索引,但是,查询(SELECT)时没有用到建立的(预期会用到)索引的情况下。失效原因有两个方面:1、建立索引的方式错误需要弄清楚 字段的#区分度(极其重要)这个概念。选择区分度高的建立索引。2、某些SELECT语句不支持使用索引注意,......
  • 在 MySQL InnoDB 中,允许开发人员在 MySQL 事务中手动控制锁 - 称之为“用户级锁”。
    在MySQLInnoDB中,允许开发人员在MySQL事务中手动控制锁-称之为“用户级锁”。用户级锁不直接与InnoDB的内部行或表锁定机制交互。用户级锁使用GET_LOCK()、RELEASE_LOCK()函数进行管理。用户级锁提供了更细粒度的控制,让你能在应用层实施自定义加锁策略。主要函数包括:GET_L......
  • 技术解读 MySQL InnoDB 大对象存储格式
    本文分享自华为云社区《【华为云MySQL技术专栏】InnoDB大对象存储格式解析》,作者:GaussDB数据库。1.背景在MySQL中,大字段是经常使用到的对象,例如:字符类型,包括日志、博客内容以及二进制类型的视频文件等。在InnoDB中,大字段也叫大对象(LargeObject,简称LOB),通常认为不会高频......
  • InnoDB中的redo log和undo log机制
    1.redolog:RedoLog是数据库系统(尤其是MySQL的InnoDB存储引擎)中用于实现事务持久性的重要机制。它记录了事务对数据库所做的修改,确保即使数据库发生崩溃,事务的提交仍然不会丢失。RedoLog的工作原理:事务开始:当事务执行开始时,任何对数据的修改都会先写入redolo......
  • InnoDB索引与底层原理
    InnoDB索引与底层原理索引介绍索引:一颗B+树,除了叶子节点外,其余的节点都作为目录项,且都是有序排列的在目录项page里面,一条记录对应着下层的一个page一条记录至少有两个列:列1作为主键记录该page最小的主键值;列2记录该page的页号在叶子节点才真正地存放数据聚簇索引:以......
  • MySQL存储引擎:InnoDB与MyISAM
    InnoDB和MyISAM是MySQL数据库中两种常用的存储引擎,它们在数据存储结构、事务支持、锁的支持、外键支持、性能等方面存在显著的差异。下面将详细介绍这两种存储引擎的特点和优势。什么是存储引擎​MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使......
  • 技术解读 MySQL InnoDB 大对象存储格式
    摘要:本文介绍了InnoDB大对象的存储格式,包括InnoDB会将数据行中的字段按照大对象格式进行存储的场景,InnoDB大对象溢出页存储常见存储格式,并详细介绍了InnoDB对大对象的常见组织管理方式。本文分享自华为云社区《【华为云MySQL技术专栏】InnoDB大对象存储格式解析》,作者:Ga......
  • MySQL学习笔记(三)InnoDB索引
    索引概念        索引在关系型数据库中,是一种单独的、物理的对数据库表中的一列或者多列值进行排序的一种存储结构,它是某个表中一列或者若干列值的集合,还有指向表中物理标识这些值的数据页的逻辑指针清单。        索引的作用相当于图书的目录,可以根据目......