Spring数据库专家web

mysql的各种名词

2018-11-27  本文已影响96人  简书徐小耳

脏页:在内存中,页数据被修改则该数据页即时脏页,通过page clean thread 去刷新脏页到磁盘

undo :保存事务提交前的数据,方便回滚

redo log buffer:我们对数据的修改先写入redo log buffer,然后写入redo log file,事务未提交的也写入

redo log file:留作数据库宕机恢复,通过purge thread 回收

insertBuffer:我们mysql中的数据默认是按照主键进行顺序存储,同时我们还需要维护非主键索引与非主键索引的关系数据页(即非主键索引),通过该索引数据可以找到主键索引,进一步通过主键索引获取到数据记录。因此insertBuffer只能适用于辅助索引,且非唯一索引,因为插入主键是顺序存放,但是对于非聚集索引则可能离散存放,通过insertBuffer 可以合并多个操作为一个,提高效率(写入到insertBuffer是顺序写的所以性能不会下降很多)

double write:为了处理部分写失效,比如16KB的页只写了4KB然后宕机,而redo log 只是记录物理日志,比如偏移量和实际记录,但是因为页已经被污染,偏移量不准了,所以需要先把double write时候顺序写的内容中对应的页复制过来 然后在进行redo 操作


image.png

如果没有doubble write 我们正常写 都是从 内存写入到文件系统,然后文件系统写入到磁盘
因为redolog写入的单位就是512字节,也就是磁盘IO的最小单位,所以无所谓数据损坏。怀疑是因为其直接绕过文件系统,直接写入到磁盘(所以正好等于磁盘IO最小单位)

image.png

其实MySQL的Innodb以及Oracle数据库的redo log,不是记录纯物理的操作,而是物理和逻辑结合的日志。(这样可以减少redo的生成).也就是说redo log 是物理和逻辑结合的日志

物理到page,也就是page具体在硬盘上的具体位置。

后面对于page的操作,则是根据自己的格式逻辑存储的(应用的时候需要通过特定的解析函数),比如说向page里面插入一条记录。

write Ahead log:即在更新内存中的页时候会去写 redo log

image.png
上一篇下一篇

猜你喜欢

热点阅读