40 | 答疑课堂:MySQL中InnoDB的知识点串讲
该思维导图由 AI 生成,仅供参考
InnoDB 体系架构
1. 内存池
- 深入了解
- 翻译
- 解释
- 总结
本文全面解析了MySQL中InnoDB存储引擎的关键知识点,包括存储引擎的体系架构、逻辑存储结构、事务中的redo log工作原理以及LRU淘汰策略。首先介绍了InnoDB的内存池、后台线程和存储文件,重点强调了缓冲池的作用和配置方式。接着详细解释了InnoDB的逻辑存储结构,包括表空间、段、区、页和行。此外,文章还阐述了InnoDB的事务实现原理,包括redo log和undo log的作用,以及脏页刷新的触发情况。最后,文章介绍了InnoDB的LRU淘汰策略,强调了其对热点数据的优化方式。对于想要深入了解InnoDB的读者来说,本文是一份很有价值的技术资料。
《Java 性能调优实战》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- 钱到此刻Java性能调优实战算是从头到尾的学习了一遍,首先,为老师的敬业态度点赞,跟着老师也学习到了许多性能调优的方法和技巧。之前也看过书,加入目前的公司后加班比较严重,看书的效率也不高了,从去年在极客时间学习后就一发不可收拾买了几十个专栏,现在还有许多未开始学习,不过买专栏有种令人安心的感觉,每天也在不断的学习,看的多了发现不同的专栏重复的内容也多了,当然,看不完了还继续买,我觉得买专栏的钱其实相对于学习到的知识来讲是非常值得的。哪怕只学习一遍,有些专栏值得一刷再刷,毕竟写专栏的老师水货少,极客时间选择讲师的专业性,也是我不断在这里付费的一个原因。我发现没有九阳神功真是学什么都慢,在计算机的世界里计算机组成原理/操作系统原理/编译原理/计算机网络原理/计算机数据库原理/数据结构与算法这些就是九阳神功,如果这些精通,什么这个那个招式全都一学就会且速度快印象深。 计算机界所有的这个理论那个原理基本都是围绕性能和容量在做文章,都想要更快的速度更大的存储空间,在升一层就是为了和时间赛跑开拓更为广阔的空间,快能占据许多的先机,不管什么行业快都具有优势。在极客时间我感觉增长见闻的效率还是挺高的,不过不看书还是不行,深度细致度系统性这些知识体验还是不能和书媲美。不学习是不可能的,人生如逆水行舟不进则退,其实学习的慢也会渐渐失去竞争优势。好奇老师这么多知识积累了多久?都是怎么积累的?除了坚持还有什么别巧妙嘛? 我的同事中有一位非常拼命,两年学习的东西顶别人四五年,住在公司附近几乎每天都疯狂加班学习,现在也非常厉害从工资上来说已经秒杀了许多工作七八年的人。先去阿里再去拼多多,真是太拼了,生活就是上班加班学习。其实我也想这么拼,我也想年入百万,不过即使时间付出的差不多,人的脑回沟及过往的受教育经历特别是思维方式的训练加英语的加持也会导致非常大的差异。 嗯,感慨有点多,继续加油吧!保持好学习的节奏,买的专栏或书,如果不看不学,还不如买几卷卫生纸。 再次感谢老师的分享,我相信有朝一日我也会像老师一样牛逼!
作者回复: 👍加油
2019-09-15429 - 拒绝老师,本讲的缓存池是基于引擎层的缓存吗?与server层的缓存有什么不同? 每个页存放的行记录也是有硬性定义的,最多允许存放 16KB/2-200行,即7992行,是怎么计算来的?
作者回复: 对的,我们之前讨论过server层的cache,主要是是根据我们查询SQL的hash值作为key,查询结果作为value值保存在cache层。而存储引擎层的缓冲池,缓冲了很多类型的数据,例如索引页、数据页等。 如果一张表的数据经常被新增、更新、删除,则导致Cache层的失效率非常高,从而导致频繁清除已缓存的数据,server层的cache可能会增加数据库的性能,在MySQL8.0已经移除该功能,建议我们在业务层或数据库中间代理层来缓存查询的结果。例如mybatis和hibernate中利用一级缓存来缓存频繁查询的数据。
2019-08-2236 - 平凡之路老师,您好,我一直有个疑问,如果数据库设置最大连接数为1000,如果像电商系统这样的网站,同时有10000个人访问登录,那不是有9000人都要等待?电商系统是用的其他数据库存储系统吗?
作者回复: 如果是同一时刻都进入到数据库,其他9000人肯定是在等待状态。数据库操作都是毫秒级的,1000人使用完之后,空闲的连接会被释放出来,所以哪怕是9000人等待,后面也会在一秒之内完成。
2019-12-0444 - 张学磊老师,客户端读取数据时,如果数据存在于缓冲池中,客户端就会直接读取缓冲池中的数据,否则将磁盘中的数据加载到缓冲池,再从缓冲池中读取,客户端始终和缓冲池交互,准确的说是不是应该这样? 另外有一处编辑错误,InnoDB 存储引擎是面向列的(row-oriented),应该写成行。
作者回复: 优先与缓冲池交互。问题已改正,谢谢指正。
2019-08-222 - 天天向上老师在:MySQL8.0取消cache 那岂不是每次查询都要访问磁盘 这样不合理吧 的回复中回答:还有一层缓冲池。但是缓冲池命中的概率很低很低吧。
作者回复: 如果频繁访问且变更非常少的数据,建议在业务层进行缓存。
2020-02-011 - 张德老师 MySQL8.0取消cache 那岂不是每次查询都要访问磁盘 这样不合理吧 还是我理解错了
作者回复: 不会的,还有一层缓冲池
2019-09-0321 - ty_young老师您好,请问Master Thread回收的undo页和Purge Thread回收的undo log是一回事么
作者回复: 在InnoDB 1.1之前,这个动作在master thread中进行,在1.1之后,独立到了purge thread中进行,所以是一回事。
2019-10-10 - 许童童老师讲得很好,这个知识串讲很不错,跟着老师一起精进。
作者回复: 一起进步
2019-08-22 - 楞伽山人老师 您好 undo log是解决ACID中的A吧 不是C吧2021-12-2921
- FiRerOUNd我理解的innodb没有实现redolog,这个是mysql服务器层实现的,所有存储引擎共同这个文件。2022-08-10归属地:北京