innodb

1、mysql数据库认识

数据库和数据库实例的区别

数据库对应数据库文件,数据库实例

2、后台线程

master线程:刷新缓存到磁盘、回收undolog、insertbuffer

IO thread

purge thread

page cleaner thread

2、innodb内存

缓存池+redolog缓存

缓冲池:通过lru来算法来管理内存

LRU LIST 负责管理缓冲池中页的可用性

FREE LIST

FLUSH LIST 用来管理将页刷新回磁盘

重做日志缓冲:innodb存储引擎首先将重做日志信息先放入到这个缓冲区,然后在意一定的频率将其刷新到重做日志中

3、checkpoint技术

倘若每个页发生一次变化就将新页刷新到磁盘,开销是很巨大。另外,如果在刷新的过程中如果宕机,那么内存中的数据就会丢失。

所以当前事务性数据库都采用write ahead log 策略,即当事务提交时,先写重做日志,在修改页。当发生宕机时,通过重做日志来完成数据的恢复。

6、innodb关键特性

6.1、插入缓冲(insert buffer)

条件:1、辅助索引2、非唯一索引

解决的问题:非唯一的辅助索引插入时,由于b+树的结构特点,需要离散的访问该索引页。

6.2、两次写(double write)

两次写可以带来数据页的可靠性

你可能会想到,如果发生写丢失,可以通过重做日志来恢复。但必须清楚的认识到,重做日志中记录的都是对页的物理操作,比如偏移量800,写‘aaa’记录。如果这个页本身已经发生了损坏,在对其进行重做是没有意义的。这就是说,在应用重做日志钱,用户需要一个副本,当写入失效发生时,先通过页的副本来还原这个页,再进行重做,这就是两次写。

实现:在刷新缓存时,并不是直接写磁盘,而是先将脏页复制到doublewrite buffer(2M)中,通过doublewriter buffer再分两次每次1M顺序地写入到共享表空间的磁盘上,完成之后,再将doublewrite buffer中的页各个表空间文件中。如果在刷缓存的时候宕机了,那么会先从共享表空间中找到这个页的副本,还原该页,再进行redolog的数据恢复。

SegmentFault博客
我还没有学会写个人说明!
上一篇

大众史上最大电动车ID.6X曝光 轴距接近途昂

下一篇

技术分享 | Oracle 和 MySQL 各自的默认隔离级别及原因分析

你也可能喜欢

评论已经被关闭。

插入图片