InnoDB文档笔记(一)

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

同事推荐看看,之前都是看书,毕竟官方文档还是靠谱些(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中。

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

查看所有标签

猜你喜欢:

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

Single Page Web Applications

Single Page Web Applications

Michael Mikowski、Josh Powell / Manning Publications / 2013-9-30 / USD 44.99

Code for most web sites mostly runs on the server. When a user clicks on a link, the site reacts slowly because the browser sends information to the server and the server sends it back again before di......一起来看看 《Single Page Web Applications》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换