innodb数据文件存储结构]
innodb数据文件存储结构
分为一个ibd文件-》segment-》extent-》page——》row
tablespace
表空间 用于存储多个ibd文件,用于存储标的记录和索引,一个文件包含多个段
segment
用于管理多个extent(区),分为数据段,索引段,回滚段 (一个表至少两个段,一个管理数据,一个管理索引,每多创建一个索引,会多两个段)
extent
区,一个区是固定包含64个连续的页,大小为1M,当表的空间不足需要分配新的页资源,直接分配一个区
page
页,用来存储多个row,大小为16K。包含很多种页类型 常见的比如:数据页,undo页,系统页,事无数据页,打的对象页(blob)
row
行,包含了一些字段值,事务id,roll point(滚动指针),字段指针
page是最基本的单位,无论何种类型的page,都是由page header,page traile,page body
Undo
意味撤销或取消,已撤销操作为目的,返回某个指定状态的操作
Undo log
数据库事务开始之前,会将要修改的记录存放到Undo日志里,当事务回滚时挥着数据库崩溃时,可以利用Undo日志撤销未提交事务对数据库的影响
(undolog 产生和销毁:在事务开始前产生,事务在提交时,并不会立刻删除undo loginnodb会将事务对应的undolog 放入删除列表中,会面会通过后台线程purge thread进行回收处理,undo log属于逻辑日志,记录一个变化过程,例如,执行一个delete,undo log会记录一个insert:执行一个update ,undo log 会记录一个想法的update)
Undo Log
采用段的方式管理和记录,在innodb数据文件中包含一种rollback segment回滚段,内不包含1024 undo log segment。通过相关的参数可以查看 show vairable like innodb_undo
Undo Log
实现事务的原子性操作
Undo Log是为了实现事物的原子性而出现的产物,事务处理过程中,如果出现了错误或者用户执行了·rollback语句,
mysql可以利用undo日志的备份将数据恢复到事务开始之前的状态
实现多版本并发控制(mvcc)
事务未提交之前,undo保存了未提交之前的版本,undo中的数据可作为数据旧版本快照供其他并发事务进行快照读
REdo 重做 已恢复操作为目的 在数据库发生意外时重现操作
redo log 指事务中修改的任何数据,将最新的数据备份存储的位置,被称作重做日志
redo log 的生成和释放:随着事务操作的执行,就会生成redo log,在事务提交时会将产生的redo log写入log buffer,并不是随着事务的提交就会立刻写入磁盘中,,等事务操作的脏页写入到磁盘之后,redo log的使命就完成了,redo log占用的空间就可以重用(被覆盖写入)
redo 工作原理
redo log是为了实现事务得持久化而出现的产物,