MySQL深入学习笔记.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

MySQL深⼊学习笔记

本⽂是阅读《MySQL技术内幕-InnoDB存储引擎》第⼆版,《MySQLDBA修炼之道》,以及《MySQL王者晋级之路》所记录的笔记.

InnoDB体系架构

线程

主线程(MasterThread):将缓冲池中的数据异步刷新到磁盘.

IO线程(IOThread):处理异步IO的请求以及回调.

清理线程(PurgeThread):回收已经使⽤但并未分配的Undo页.

页清理线程(PageCleanerThread):负责脏页的刷新操作

内存

LRU列表⽤来管理已经读取的页,如果LRU列表⾥读取的页被修改,那么这个时候内存和磁盘的数据不⼀致就会产⽣脏页.

脏页由FlushList进⾏管理.FreeList管理空闲页的列表,如果后续FreeList列表空间不⾜,从LRU列表进⾏淘汰再进⾏分配空间.

脏页通过CheckPoint机制刷新到磁盘.

缓冲池:缓冲池可以将索引页,数据页,undo页,插⼊缓存,⾃适应哈希索引,InnoDB存储的锁信息,数据字典等信息放⼊到内存,加速查询以及

修改.缓冲池不可能完全承载⽂件数据,因此缓冲池当中的数据需要根据改进的LRU算法进⾏淘汰.

重做⽇志缓冲:存储重做⽇志

额外的内存池:存储内部数据结构

CheckPoint机制

CheckPoint由主线程按照1s或者10s刷新⼀定⽐例的脏页到磁盘.

CheckPoint⽬的是为了:缩短数据库恢复时间,释放缓冲池空间,重做⽇志不可⽤时刷新磁盘.

InnoDB核⼼设计

以下为InnoDB特性,为数据库可靠性,⾼性能提供了保证.

InsertBuffer

为了解决⾮聚集索引的离散插⼊,删除或更新的问题的问题,InsertBuffer诞⽣.

注意官⽅后续将InsertBuffer改名为ChangeBuffer,增加了update/delete的⽀持.

众所周知,⾮聚集索引插⼊会引起随机IO,因为⾮聚集索引和聚集索引的顺序可能是不⼀致的,当⼀条数据插⼊时是数据页是顺序的但是对于⾮

聚集索引就可能不是了,因此需要将插⼊操作合并,以减少随机IO.

前提条件:

索引是辅助索引.

索引是⾮唯⼀索引(因为InnoDB不能保证插⼊新值的唯⼀性).

InsertBuffer是存在于共享表空间中(ibdata1),本质是⼀个B+树,当⼀辅助索引插⼊到⾮聚集索引页当中,先判断这个页在缓冲池如果在直接

插⼊,若不存在构造⼀个searchkey插⼊到B+树页⼦节点,searchkey包含spaceid(表空间),offset(页中偏移量).

如下情况会进⾏MergeInsertBuffer:

辅助索引被读取到缓冲池,InsertBuffer中的该辅助索引页的相关记录会插⼊辅助索引页

MasterThread

辅助索引页⽆可⽤空间

这时候随机插⼊变为顺序写⼊,性能极⼤提升.

注意:唯⼀索引的插⼊性能要⽐辅助索引的插⼊性能要差很多,是因为唯⼀索引需要把要插⼊值的位置读⼊内存中,然后进⾏判断是否唯

⼀,然后再写⼊这个值

DoubleWrite

当⼀种情况写⼊16KB的页(⼀般Linux操作系统页⼤⼩为4kb)写⼊⼀半发⽣故障后,该页被损坏不能直接从重做⽇志恢复.

因此两次写保证InnoDB写⼊⽂件的可靠性.

思路:将页复制⼀个副本,防⽌写⼊失效时页损坏.进⾏恢复时,先通过的页的副本还原该页,然后进⾏重做⽇志恢复.

DoubleWriteBuffer提供2M的共享表空间,存储写⼊页的信息.

先将脏页写⼊到DoubleWriteBuffer内存中(memcpy),然后写⼊共享表空间中(此时为顺序写,需要进⾏fsync),然后在将数据页写⼊相应的

表空间⽂件.

AdaptiveHash

InnoDB会根据数据的访问频率和模式(联合索引(a,b),wherea=X与wherea=Xandb=X是不同模式)来⾃动建⽴Hash索引.

但是有⼀些局限性就是只适合=条件.

AIO与刷新邻近页

通过内核异步IO可以提升磁盘效率.

写⼊脏页时会判断临近的脏页如果存在会⼀起同过AIO执⾏.

WAL⽇志先写

所有改变的数据先写⼊redolog,可以推迟数据写⼊⽂件的时机,保护数据的丢失.

GroupCommit组提交

组提交可以⼀并将redologbuffer的数据或者是binlogcache的多个事务数据数据合并写⼊⽂件中,减少底层IO操作次数,提升性能

刷脏页的时机

1.系统内

文档评论(0)

洞察 + 关注
官方认证
文档贡献者

博士生

认证主体宁夏三科果农牧科技有限公司
IP属地宁夏
统一社会信用代码/组织机构代码
91640500MABW4P8P13

1亿VIP精品文档

相关文档