SHOW ENGINES
查看所有存储引擎及支持情况
当启动InnoDB的时候,会自动进行兼容性检查
ACID 模型
Atomicity
主要与事务操作相关,autocommit、Commit、rollback
Consistency
用于保护数据的引擎内部处理程序,包括doublewrite buffer、crash recovery
Isolation
主要与事务操作相关,autocommit、isolation level 、locking
Durability
主要涉及mysql 软件与一些特定硬件的配置
InnoDB - 多版本存储引擎
引擎会保存旧版的数据信息(例如更新/删除的行)以支持事务操作的功能特征。
InnoDB内部会自动为每行增加三个字段:
1.DB_TRX_ID 6-byte,唯一标记一个最新执行的事务。
2.DB_ROLL_PTR 7-byte,又称为roll pointer,其指向rollback segment中的 一个undo log record。
3.DB_ROW_ID 6-byte,包含一个在新行被插入之后单调递增的ROW ID。如果Innodb数据表自动的形成了一个聚集索引,那么这个索引中就会包含row id的值。否则,DB_ROW_ID不会出现在任何索引中。
rollback segment 是保存事务操作相关信息的数据结构。
保存在rollbacksegment 中的 undo log 包括insert 和 update两个类型。其中,insert undo log 只用于事务回滚,一旦事务提交就可以被删除。而Update undo log 还可以用于一致性读。
undo log record 的物理空间比与之相对应的insert、update row 所占物理空间要小很多。
在多版本机制下,当你执行一个delete 语句,row并没有立刻从磁盘上被彻底删除。仅仅当被标记为deletion 的undo log 记录被丢弃之后(rollback segment不需要再持有该记录的时候) ,row才真正被删除。
innodb_max_purge_lag?
MVCC (multiversion consurrency control)和Secondary Indexes (二级索引)
每张表只能有一个cluster index (聚簇索引),其他的非聚簇索引都称为二级索引。
cluster index :记录更新时,从隐藏的系统列找到undo log的入口,并从中获取历史版本记录信息。
secondary index(columns 的一个子集):通过cluter index 作为跳板获取undo log 历史信息。