暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
洞悉MySQL底层架构:游走在缓冲与磁盘之间 - arthinking-itzhai - 博客园.pdf
72
43页
2次
2023-09-27
5墨值下载
洞悉MySQL底层架构:游走在缓冲与磁盘之间 - arthinking-
itzhai
提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较
零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系。为此我撰
写了这篇文章,试图让这些底层架构相关知识更加直观易懂:
尽量以图文的方式描述技术原理;
涉及到关键的技术,附加官网或者技术书籍来源,方便大家进一步扩展学习;
涉及到的背景知识尽可能做一个交代,比如讨论到log buffer的刷盘方式,延伸一下IO写磁盘相关知识点。
好了,MySQL从不会到精通系列马上就要开始了(看完之后还是不会的话..请忽略这句话)。
可能会有同学问:为啥不直接学更加先进的TiDB,或者是强大的OceanBase。
其实,MySQL作为老牌的应用场景广泛的关系型开源数据库,其底层架构是很值得我们学习的,吸收其设计精
华,那么我们在平时的方案设计工作中也可以借鉴,如果项目中用的是MySQL,那么就能够把数据库用的更好
了,了解了MySQL底层的执行原理,对于调优工作也是有莫大帮助的。本文我重点讲述MySQL底层架构,涉及
到:
内存结构buffer poollog bufferchange buffer,buffer pool的页淘汰机制是怎样的;
磁盘结构系统表空间独立表空间通用表空间undo表空间redo log
以及IO相关底层原理、查询SQL执行流程、数据页结构行结构描述、聚集索引辅助索引的底层数据组织
方式、MVCC多版本并发控制的底层实现原理,以及可重复读读已提交是怎么通过MVCC实现的。
看完文本文,您将了解到:
1. 整体架构:InnoDB存储架构是怎样的 (1、MySQL架构)
2. 工作原理:查询语句的底层执行流程是怎样的 (2、查询SQL执行流程)
3. IO性能:文件IO操作写磁盘有哪几种方式,有什么IO优化方式 (3.1.2、关于磁盘IO的方式)
4. 缓存:InnoDB缓存(buffer pool, log buffer)的刷新方式有哪些(3.1.2.2、innodb_flush_method)
5. 缓存:log buffer是在什么时候写入到磁盘的(3.10.2、如何保证数据不丢失 - 其中第四步log buffer持久化
到磁盘的时机为)
6. 缓存:为什么redo log prepare状态也要写磁盘?(3.10.2、如何保证数据不丢失 - 为什么第二步redo log
prepare状态也要写磁盘?)
7. 缓存:脏页写盘一般发生在什么时候(3.10.2、如何保证数据不丢失 - 其中第五步:脏页刷新到磁盘的时机
为)
8. 缓存:为什么唯一索引的更新不可以借助change buffer(3.2、Change Buffer)
9. 缓存:log buffer的日志刷盘控制参数innodb_flush_log_at_trx_commit对写性能有什么影响(3.4.1、配置
参数)
10. 缓存:buffer pool的LRU是如何实现的,为什么要这样实现(3.1.1、缓冲池LRU算法)
11. 表存储:系统表空间的结构,MySQL InnoDB磁盘存储格式,各种表空间(系统表空间,独立表空间,通用
表空间)的作用和优缺点是什么,ibdataibdfrm文件分别是干嘛的(3.5、表空间)
12. 行字段存储:底层页和行的存储格式(3.6、InnoDB底层逻辑存储结构)
13. 行字段存储:varcharnull底层是如何存储的,最大可用存储多大的长度(3.6.3.1、MySQL中varchar最大
长度是多少)
14. 行字段存储:行记录太长了,一页存不下,该怎么存储?(3.6.3.2、行记录超过页大小如何存储)
15. 索引:数据库索引的组织方式是怎样的,明白为什么要采用B+树,而不是哈希表、二叉树或者B树(3.7、索
引 - 为什么MySQL使用B+树)
16. 索引:索引组织方式是怎样的,为什么大字段会影响表性能(查询性能,更新性能)(3.7、索引)
17. 索引:覆盖索引联合索引什么情况下会生效(3.7.2、辅助索引)
18. 索引:什么是索引下推,索引下推减少了哪方面的开销?(3.7.2、辅助索引 - 索引条件下推)
19. 索引:Change Buffer对二级索引DML语句有什么优化(3.2、Change Buffer)
20. 数据完整性:MySQL是如何保证数据完整性的,redo logundo logbuffer pool数据完整性的关键作用
分别是什么(3.10.2、如何保证数据不丢失)
21. MVCCMVCC底层是怎么实现的,可重复读和读已提交是怎么实现的(3.11.2、MVCC实现原理)
22. 双写缓冲区有什么作用(3.9、Doublewrite Buffer
23. Redo Log在一个事务中是在什么时候写入的?binlog和Redo Log有什么区别?(3.10.1、Redo Log在事务
中的写入时机)
1、MySQL架构
如下图为MySQL架构涉及到的常用组件:
of 43
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜