mysql innodb的重要组件汇总
innodb包涵如下几个组件
一、innodb_buffer_pool:
它主要用来缓存数据与索引(准确的讲由于innodb中的表是由聚集索引组织的,所以数据只不是过主键这个索引的叶子结点)。
二、changebuffer:
1如果更新语句要更新二级索引的记录,但是记录所在的页面这个里面并没有在innodb_buffer_pool中,innodb会把这个对二级索引
面页的更新动作缓存到innodb_buffer_pool的一个特定区域(changebuffer);等到之后如果有别的事务B要去读这个二级索引页的时候,
由于页面还没有,在innodb_buffer_pool中所以B事务会先把页面载入innodb_buffer_pool,这样子目标页面就算进入innodb_buffer_pool了,
接下来就可根据changebuffer的内容来更新索引页面了。这样可以节约IO操作,提高性能。
2当然别的刷新机(把changebuffer中的变更落盘)制也是有的,比如说当mysql比较空闲的时候,slowshutdown的过程当中也会刷新
changebuffer中的内容到磁盘
3监控changebuffer
showengineinnodbstatus; ------------------------------------- INSERTBUFFERANDADAPTIVEHASHINDEX ------------------------------------- Ibuf:size1,freelistlen0,segsize2,0merges mergedoperations: insert0,deletemark0,delete0 discardedoperations: insert0,deletemark0,delete0 Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) Hashtablesize34679,nodeheaphas0buffer(s) 0.00hashsearches/s,0.00non-hashsearches/s --- LOG --- Logsequencenumber24635311 Logflushedupto24635311 Pagesflushedupto24635311 Lastcheckpointat24635302 0pendinglogflushes,0pendingchkpwrites 10logi/o'sdone,0.00logi/o's/second
三、自适应hash索引:
1如果表中的某些行会非常频繁的用到,由于innodb表是B+树组织起来的这一特性,最好的情况下innodb也是先读索引页,再读数据页,然后
找到数据;hash索引是用B+树索引的hash为键,以B+树索引的值(指向的页面)为值的;由于有了hash索引的引入,innodb可以通过计算索引的hash
值就直接定位到数据所在的页面;所以对于非范围查找的情况下hash索引这样的处理方式是有优势的。
2要想innodb能用上bash索引还要有几个条件1、innodb_adaptive_hash_index=1这样innodb就会启用hash索引了;然而这只是完成了一半,
innodb并不是为表中的所有行建立hash索引的,只是表中频繁访问的行才会为它建立hash索引,为冷数据建立hash索引是一种浪费;
innodb_adaptive_hash_index_parts可以设置hash索引的分区,这种可以提升并发度。
四、redologbuffer:
redologbuffer中的内容会被定期的刷新到磁盘,如果redologbuffer设置的比较大它有利于mysql对大事务的处理,原因在于在大事务的处理中
可以把redo写入到redologbuffer而不是写入到磁盘,由于内存比磁盘快,所以大事务的处理速度上也会比较快;也就是说redologbuffer比较大
的情况下在commit之前可以减少一些没有必要的刷磁盘操作。
五、系统表空间:
innodb系统表空间中包涵如下内容:innodb数据字典,一些存储区域如doublewrite\changebuffer\undolog,如果innodb_file_per_table
没有打开那么那么用户建的表就会保存到这个系统表空间中,这种情况下系统表空间也就可以看面它包涵共享表空间了。
以上就是mysqlinnodb的重要组件汇总的详细内容,更多关于mysqlinnodb组件的资料请关注毛票票其它相关文章!