深入了解InnoDB-技术内幕InnoDB( 二 )


每秒redo log 刷盘一次
索引
B+树索引、全文索引、哈希索引 。联合索引/多列索引、覆盖索引、倒排索引、前缀索引
需要牢记的是 , B+ 树索引本身并不能找到具体的一条记录 , 能找到只是该记录所在的页 。数据库把页载人到内存 , 然后通过Page 再进行二叉查找 。只不过二叉查找的时间复杂度很低 , 同时在内存中的查找很快 , 因此通常忽略这部分查找所用的时间 。
MySQL两阶段提交过程:
两阶段提交分别为和阶段 。
锁 关键点
存储弓I擎支持意向锁设计比较简练 , 其意向锁即为表级别的锁 。设计目的主
要是为了在-一个事务中揭示下一-行将被请求的锁类型 。其支持两种意向锁:
存储弓|擎实现了如下两种标准的行级锁:
锁的算法 行锁的算法
存储引擎有3种行锁的算法 , 其分别是:
锁的问题
脏读
不可重复读
丢失更新
阻塞
死锁:死锁是指两个或两个以.上的事务在执行过程中 , 因争夺锁资源而造成的一种互相等待的现象 。
事务 事务的特性ACID事务的隔离级别
实际上mysql在可重复读隔离级别就解决了幻读问题 , 通过next-key
隔离级别问题
读未提交
脏读 不可重复度 幻读
读已提交
不可重复度 幻读
可重复读
幻读
可串行化
无问题
事务的实现
事务隔离性由第6章讲述的锁来实现 。原子性、一致性、持久性通过数据库的redo log和undo log来完成 。redo log称为重做日志 , 用来保证事务的原子性和持久性 。用来保证事务的一致性 。有的DBA或许会认为undo是redo的逆过程 , 其实不然 。redo和undo的作用都可以视为是一种恢复操作 , redo恢复提交事务修改的页操作 , 而undo回滚行记录到某个特定版本 。因此两者记录的内容不同 , redo通常是物理日志 , 记录的是页的物理修改操
作 。undo 是逻辑日志 , 根据每行记录进行记录 。
MVCC
read view 。trx id 。roll