Java性能调优实战
刘超
金山软件西山居技术经理
立即订阅
7535 人已学习
课程目录
已完结 48 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 怎样才能做好性能调优?
免费
模块一 · 概述 (2讲)
01 | 如何制定性能调优标准?
02 | 如何制定性能调优策略?
模块二 · Java编程性能调优 (10讲)
03 | 字符串性能优化不容小觑,百M内存轻松存储几十G数据
04 | 慎重使用正则表达式
05 | ArrayList还是LinkedList?使用不当性能差千倍
加餐 | 推荐几款常用的性能测试工具
06 | Stream如何提高遍历集合效率?
07 | 深入浅出HashMap的设计与优化
08 | 网络通信优化之I/O模型:如何解决高并发下I/O瓶颈?
09 | 网络通信优化之序列化:避免使用Java序列化
10 | 网络通信优化之通信协议:如何优化RPC网络通信?
11 | 答疑课堂:深入了解NIO的优化实现原理
模块三 · 多线程性能调优 (10讲)
12 | 多线程之锁优化(上):深入了解Synchronized同步锁的优化方法
13 | 多线程之锁优化(中):深入了解Lock同步锁的优化方法
14 | 多线程之锁优化(下):使用乐观锁优化并行操作
15 | 多线程调优(上):哪些操作导致了上下文切换?
16 | 多线程调优(下):如何优化多线程上下文切换?
17 | 并发容器的使用:识别不同场景下最优容器
18 | 如何设置线程池大小?
19 | 如何用协程来优化多线程业务?
20 | 答疑课堂:模块三热点问题解答
加餐 | 什么是数据的强、弱一致性?
模块四 · JVM性能监测及调优 (6讲)
21 | 磨刀不误砍柴工:欲知JVM调优先了解JVM内存模型
22 | 深入JVM即时编译器JIT,优化Java编译
23 | 如何优化垃圾回收机制?
24 | 如何优化JVM内存分配?
25 | 内存持续上升,我该如何排查问题?
26 | 答疑课堂:模块四热点问题解答
模块五 · 设计模式调优 (6讲)
27 | 单例模式:如何创建单一对象优化系统性能?
28 | 原型模式与享元模式:提升系统性能的利器
29 | 如何使用设计模式优化并发编程?
30 | 生产者消费者模式:电商库存设计优化
31 | 装饰器模式:如何优化电商系统中复杂的商品价格策略?
32 | 答疑课堂:模块五思考题集锦
模块六 · 数据库性能调优 (8讲)
33 | MySQL调优之SQL语句:如何写出高性能SQL语句?
34 | MySQL调优之事务:高并发场景下的数据库事务调优
35 | MySQL调优之索引:索引的失效与优化
36 | 记一次线上SQL死锁事故:如何避免死锁?
37 | 什么时候需要分表分库?
38 | 电商系统表设计优化案例分析
39 | 数据库参数设置优化,失之毫厘差之千里
40 | 答疑课堂:MySQL中InnoDB的知识点串讲
模块七 · 实战演练场 (4讲)
41 | 如何设计更优的分布式锁?
42 | 电商系统的分布式事务调优
43 | 如何使用缓存优化系统性能?
44 | 记一次双十一抢购性能瓶颈调优
结束语 (1讲)
结束语 | 栉风沐雨,砥砺前行!
Java性能调优实战
登录|注册

40 | 答疑课堂:MySQL中InnoDB的知识点串讲

刘超 2019-08-22
你好,我是刘超。
模块六有关数据库调优的内容到本周也正式结束了,今天我们一起串下 MySQL 中 InnoDB 的知识点。InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表。

InnoDB 体系架构

InnoDB 主要包括了内存池、后台线程以及存储文件。内存池又是由多个内存块组成的,主要包括缓存磁盘数据、redo log 缓冲等;后台线程则包括了 Master Thread、IO Thread 以及 Purge Thread 等;由 InnoDB 存储引擎实现的表的存储结构文件一般包括表结构文件(.frm)、共享表空间文件(ibdata1)、独占表空间文件(ibd)以及日志文件(redo 文件等)等。

1. 内存池

我们知道,如果客户端从数据库中读取数据是直接从磁盘读取的话,无疑会带来一定的性能瓶颈,缓冲池的作用就是提高整个数据库的读写性能。
客户端读取数据时,如果数据存在于缓冲池中,客户端就会直接读取缓冲池中的数据,否则再去磁盘中读取;对于数据库中的修改数据,首先是修改在缓冲池中的数据,然后再通过 Master Thread 线程刷新到磁盘上。
理论上来说,缓冲池的内存越大越好。我们在第 38 讲中详细讲过了缓冲池的大小配置方式以及调优。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java性能调优实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • JackJin
    老师,本讲的缓存池是基于引擎层的缓存吗?与server层的缓存有什么不同?
    每个页存放的行记录也是有硬性定义的,最多允许存放 16KB/2-200行,即7992行,是怎么计算来的?

    作者回复: 对的,我们之前讨论过server层的cache,主要是是根据我们查询SQL的hash值作为key,查询结果作为value值保存在cache层。而存储引擎层的缓冲池,缓冲了很多类型的数据,例如索引页、数据页等。

    如果一张表的数据经常被新增、更新、删除,则导致Cache层的失效率非常高,从而导致频繁清除已缓存的数据,server层的cache可能会增加数据库的性能,在MySQL8.0已经移除该功能,建议我们在业务层或数据库中间代理层来缓存查询的结果。例如mybatis和hibernate中利用一级缓存来缓存频繁查询的数据。

    2019-08-22
    4
  • godtrue
    到此刻Java性能调优实战算是从头到尾的学习了一遍,首先,为老师的敬业态度点赞,跟着老师也学习到了许多性能调优的方法和技巧。之前也看过书,加入目前的公司后加班比较严重,看书的效率也不高了,从去年在极客时间学习后就一发不可收拾买了几十个专栏,现在还有许多未开始学习,不过买专栏有种令人安心的感觉,每天也在不断的学习,看的多了发现不同的专栏重复的内容也多了,当然,看不完了还继续买,我觉得买专栏的钱其实相对于学习到的知识来讲是非常值得的。哪怕只学习一遍,有些专栏值得一刷再刷,毕竟写专栏的老师水货少,极客时间选择讲师的专业性,也是我不断在这里付费的一个原因。我发现没有九阳神功真是学什么都慢,在计算机的世界里计算机组成原理/操作系统原理/编译原理/计算机网络原理/计算机数据库原理/数据结构与算法这些就是九阳神功,如果这些精通,什么这个那个招式全都一学就会且速度快印象深。
    计算机界所有的这个理论那个原理基本都是围绕性能和容量在做文章,都想要更快的速度更大的存储空间,在升一层就是为了和时间赛跑开拓更为广阔的空间,快能占据许多的先机,不管什么行业快都具有优势。在极客时间我感觉增长见闻的效率还是挺高的,不过不看书还是不行,深度细致度系统性这些知识体验还是不能和书媲美。不学习是不可能的,人生如逆水行舟不进则退,其实学习的慢也会渐渐失去竞争优势。好奇老师这么多知识积累了多久?都是怎么积累的?除了坚持还有什么别巧妙嘛?
    我的同事中有一位非常拼命,两年学习的东西顶别人四五年,住在公司附近几乎每天都疯狂加班学习,现在也非常厉害从工资上来说已经秒杀了许多工作七八年的人。先去阿里再去拼多多,真是太拼了,生活就是上班加班学习。其实我也想这么拼,我也想年入百万,不过即使时间付出的差不多,人的脑回沟及过往的受教育经历特别是思维方式的训练加英语的加持也会导致非常大的差异。
    嗯,感慨有点多,继续加油吧!保持好学习的节奏,买的专栏或书,如果不看不学,还不如买几卷卫生纸。
    再次感谢老师的分享,我相信有朝一日我也会像老师一样牛逼!

    作者回复: 👍加油

    2019-09-15
    1
    2
  • 张学磊
    老师,客户端读取数据时,如果数据存在于缓冲池中,客户端就会直接读取缓冲池中的数据,否则将磁盘中的数据加载到缓冲池,再从缓冲池中读取,客户端始终和缓冲池交互,准确的说是不是应该这样?
    另外有一处编辑错误,InnoDB 存储引擎是面向列的(row-oriented),应该写成行。

    作者回复: 优先与缓冲池交互。问题已改正,谢谢指正。

    2019-08-22
    1
  • 平凡之路
    老师,您好,我一直有个疑问,如果数据库设置最大连接数为1000,如果像电商系统这样的网站,同时有10000个人访问登录,那不是有9000人都要等待?电商系统是用的其他数据库存储系统吗?

    作者回复: 如果是同一时刻都进入到数据库,其他9000人肯定是在等待状态。数据库操作都是毫秒级的,1000人使用完之后,空闲的连接会被释放出来,所以哪怕是9000人等待,后面也会在一秒之内完成。

    2019-12-04
    1
  • 李豪
    “每个页存放的行记录也是有硬性定义的,最多允许存放 16KB/2-200 行,即 7992 行记录。”
    老师,请问一下,这里的7992是怎么计算出来的呢?
    2019-11-13
    1
  • ty_young
    老师您好,请问Master Thread回收的undo页和Purge Thread回收的undo log是一回事么

    作者回复: 在InnoDB 1.1之前,这个动作在master thread中进行,在1.1之后,独立到了purge thread中进行,所以是一回事。

    2019-10-10
  • 张德
    老师 MySQL8.0取消cache 那岂不是每次查询都要访问磁盘 这样不合理吧 还是我理解错了

    作者回复: 不会的,还有一层缓冲池

    2019-09-03
  • 许童童
    老师讲得很好,这个知识串讲很不错,跟着老师一起精进。

    作者回复: 一起进步

    2019-08-22
收起评论
8
返回
顶部