InnoDB文档笔记(一)

栏目: 数据库 · 发布时间: 6年前

同事推荐看看,之前都是看书,毕竟官方文档还是靠谱些(Verison 5.7)

一、简介

  • ACID事务、行级锁、主键、外键
    InnoDB文档笔记(一)

1.1 好处

  • crash recovery 故障重启后自动恢复
  • buffer pool 常用数据和索引会缓存在内存中
  • foreign keys 外键约束
  • checksum 数据损坏提醒
  • primary key 主键
  • chang buffering
  • adaptive hash index

1.2 ACID

  • Atomicity 跟事务相关,包括autocommit、commit、rollback
  • Consistency 数据保护相关,包括doublewrite buffer、crash recovery
  • Isolation 事务隔离级别
  • Durability 依赖软件硬件

1.3 InnoDB Multi-Versioning

  • 关于数据行的变更信息存储在表空间里面,叫做rollback segment
  • InnoBD在数据库中为每一行数据存储三个字段。
    • DB_TRX_ID,6个字节,记录上一次insert/update操作的事务ID(delete看作update)
    • DB_ROLL_PTR(roll pointer),7个字节,指向写入rollback segement 的undo日志记录
    • DB_ROW_ID,6个字节,单调递增,聚簇索引包括row ID
  • 存入rollback segement的Undo logs 分为save undo logs和update undo logs
  • purge thread
  • 二级索引不包含系统隐藏列
  • 二级索引删除或者更新,覆盖索引将不能使用,InnoDB将从聚簇索引中读取数据

二、InnoDB Architecture

InnoDB文档笔记(一)

三、InnoDB In-Memory Structures

3.1 Buffer Pool

在主内存中缓存表数据和索引数据。缓冲池是一个连续的页,采用LRU算法淘汰很少使用的数据。

InnoDB文档笔记(一)

3.2 Change Buffer

change buffer是一种特殊的数据结构,缓存二级索引页的变化,并且这些缓存页不在buffer pool中。change buffer主要有DML操作导致的,并且当有读操作将页面加载到buffer pool后,进行合并到buffer pool。事务提交会导致change buffer合并,服务器停止和重启也会导致。如果二级索引包含降序索引列或主键包含降序索引列,则不支持更改缓冲。 change buffer默认占有buffer pool内存的25%,最大为50%。

InnoDB文档笔记(一)

3.3 Adaptive Hash Index

自适应Hash Index是为加速查询 在 Mysql 5.7中,对自适应Hash Index进行了分区,每个索引绑定一个特定的分区,并且每个分区是被分离锁保护。分区是由innode_adaptive_hash_index_parts控制,默认8个分区,最大512。

3.4 Log Buffer

日志缓冲区是存储要写入磁盘上的日志文件的数据的内存区域。默认16MB。

四、InnoDB On-Disk Structures

4.1 Tables

4.1.1 Creating InnoDB Tables

InnoDB表及其索引可以在system tablespace、file-per-table tablespace、general tablespace中创建。当innodb_file_per_table开启,InnoDB table就隐式在每个file-per-table tablespace中,相反则在system tablespace。至于general tablespace,则需要使用create table ... tablespace语句。 当新建一个InnoDB table时,会在数据库data目录下创建一个.frm的文件。

  • 在file-per-table tablespace中创建的表,在数据库目录下会创建一个.ibd的文件。
  • 在system tablespace中创建的表,是在数据库目录下会现有的ibdata 文件中创建。
  • 在general tablespace中创建的表,是在现有的.ibd文件中创建。

数据行格式由innodb_default_row_format决定,默认是DYNAMIC。

4.1.2 Moving or Copying InnoDB Tables

  • Transportable Tablespaces

前提是表是由innode_file_per_table tablespace创建。

  • MySQL Enterprise Backup
  • Copying Data Files (Cold Backup Method)
  • Export and Import (mysqldump)

4.1.3 Converting Tables from MyISAM to InnoDB

  • Adjusting Memory Usage for MyISAM and InnoDB
  • Handling Too-Long Or Too-Short Transactions
  • Handling Deadlocks
  • Planning the Storage Layout
  • Converting an Existing Table
  • Cloning the Structure of a Table
  • Transferring Existing Data
  • Storage Requirements
  • Defining a PRIMARY KEY for Each Table
  • Application Performance Considerations
  • Understanding Files Associated with InnoDB Tables

4.1.4 AUTO_INCREMENT Handling in InnoDB

必须至少是索引的一部分

4.2 Indexes

聚簇索引存储行数据,聚簇索引和主键是一致的。

没有定义主键或者没有合适的唯一索引,InnoDB内部在包含row id值的合成列上生成一个名为GEN_CLUST_INDEX的隐藏集群索引。这个row id占用6个字节。

二级索引包含主键值,通过主键值查找聚簇索引。

除了空间索引是R-tree结构,其他的InnoDB索引都是B-tree结构,索引记录都存在树的叶子节点上,默认一个索引页大小16kb。索引记录是有序存储的,这样可以让索引页15/16的空间是利用的,1/16的空间给索引增加预留。

4.2.1 Sorted Index Bulid

index bulid分为三个阶段

  • 第一阶段:扫描聚集索引,生成索引条目并将其添加到 排序 缓冲区。当排序缓冲区满时,条目将被排序并写入临时中间文件。这个过程也称为“run”。
  • 第二阶段:将一个或多个run写入临时中间文件,对文件中的所有条目执行合并排序。
  • 第三阶段:排序后的条目被插入到B-tree中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

构建之法

构建之法

邹欣 / 人民邮电出版社 / 2014-9 / 49.00元

内容简介: 软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。作者邹欣有长达20年的一线软件开发经验,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让 同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划,并得到高校师生的积极反馈......一起来看看 《构建之法》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具