请阐述一下InnoDB的结构
InnoDB整体可分做:内存组件(Memory)和磁盘存储(Disk),InnoDB通过一系列的后台线程将内存中的更改刷新到磁盘。
1.内存组件
InnoDB内存组件有三大块:缓冲池,额外内存池和redo log buffer。缓存池中缓存数据页、索引页、undo页、插入缓冲页,自适应哈希索引,数据字典和锁信息。
2磁盘存储
磁盘存储分为系统共享表空间、用户表空间和重做日志组。
用户表空间:在innodb_file_per_table参数设置为1的情况下,表的.ibd文件单独存放。每个InnoDB表都有其对应的.ibd文件来存储表数据。
系统共享表空间ibdata1:包含insert buffer segment, double write segment,数据字典segment,Rollback segment, undo space。
3.后台线程
InnoDB的后台线程包括master thread,IO thread,lock monitor thread, error monitor thread,purge thread,page cleaner thread。IO thread通常又包含4个read thread,4个write thread,1个insert buffer thread,1个log IO thread。
用户查询数据时,InnoDB通过read