设为首页 收藏本站
查看: 540|回复: 0

[经验分享] MySQL InnoDB的内存管理

[复制链接]

尚未签到

发表于 2018-10-4 07:09:52 | 显示全部楼层 |阅读模式
  一、前言:数据库的引擎是整个mysql数据库的核心组件,mysql的存储引擎众多,MyISAM、InnoDB、Memory、Archive等,其中InnoDB是mysql里面支持事务类型的一个存储引擎最好的一个,雅虎、facebook、youtube、淘宝、谷歌用的mysql数据库都有用到InnoDB的存储引擎;
  在此附上经典的mysql的架构图:

  二、通过了解mysql的系统架构之后,便可以初步的了解innodb存储引擎的架构模型了,接下来又是一张经典的innodb存储引擎的系统架构图

  从图上看可以清晰的看到innodb存储引擎可以分为三部分:内存、进程、数据文件(如果了解ORACLE的话,ORACLE的架构体系跟这个是很像的,在比较中学习总是很有一番趣味)
  2.1 innodb的内存的作用大致如下:

  •   缓存磁盘上的数据,方便快速的读取;
  •   对磁盘文件的数据进行修改之前在这里缓存;
  •   应用所作的日志的缓存;
  •   内存结构自身的管理结构;
  内存结构根据功能可以分成三部分:Innodb buffer pool、additional buffer pool、log buffer;
  2.1.1 Innodb buffer pool:缓冲池,从图上可以看到buffer pool占用最大块的内存部分,主要用来各种数据的缓冲。innodb将数据文件按页(16K)读取到缓冲池,然后按最少使用(LRU)算法来保留缓存数据;数据文件修改时,先修改缓存池中的页(即脏页),然后按一定平率将脏页刷新到文件;
  通过语句可以查看mysql各内存的分配情况:
  mysql> show variables like 'innodb_%_size';
  +---------------------------------------------------+------------------+
  | Variable_name | Value |
  +----------------------------------------------------+------------------+
  | innodb_additional_mem_pool_size | 8388608    |
  | innodb_buffer_pool_size                | 134217728 |
  | innodb_log_buffer_size                  |     8388608 |
  | innodb_log_file_size                       |     5242880 |
  | innodb_purge_batch_size               |             20 |
  +-------------------------------------------+-----------------+
  5 rows in set (0.00 sec)
  innodb_additional_mem_pool_size 的大小为8388608/1024/1024=8M
  innodb_buffer_pool_size 的大小134217728/1024/1024=128M
  innodb_log_buffer_size 的大小8388608/1024/1024=8M
  运行脚本:show engine innodb status可以查看innodb_buffer_pool的运行情况;
  mysql> show engine innodb status\G;
  ***********************************************************
  Type: InnoDB
  Name:
  Status:
  Total memory allocated 137363456; in additional pool allocated 0
  Dictionary memory allocated 53307
  Buffer pool>
  Free buffers 7784
  Database pages 406
  Old database pages 0
  Modified db pages 0
  *********************************************************************************************
  红色的文字显示InnoDB存储引擎缓冲池的使用情况,这边的单位是buffer frame,每个buffer frame为16K,通过计算可以查看buffer pool的使用情况


  •   Buffer pool>
  •   Free buffers表示当前空闲的缓冲帧7784×16k/1024=121MB
  •   Database pages表示已经使用的缓冲帧 406×16k/1024=6.34MB
  •   Modified db pages 表示脏页的数量,当前显示为0;
  •   Old database pages表示LRU列表中old sublist中的数据块数量
  对上面的innodb buffer pool细看会发现,buffer pool的数据类型又可以分为:page cache、hash index、undo、insert buffer、explicit locks;
  2.1.2 Log Buffer:日志缓冲池(功能跟oracle redo log buffer基本相似),将重做日志信息放入这个缓冲区,然后按一定频率将其刷新到重做日志文件。该值一般不需要设置很大,因为一般情况下每一秒钟就会将重做日志缓冲刷新到日志文件,因此我们只需要保证每秒产生的食物量在这个缓冲大小之内即可;
  脚本: show variables like ' innodb_log_buffer_size ';   可以显示log buffer的大小;
  2.1.3 additional buffer pool:额外缓冲池,mysql技术内部Innodb存储引擎上面是这样介绍的:
  在innodb存储引擎中,对内存的管理是通过一种称为内存堆的方式进行的。在对一些数据结构本身分配内存时,需要从额外获得内存池中申请,当该区域的内存不够时,Innodb会从缓冲池中申请。但是每个缓冲池中的frame buffer还有对应的缓冲控制对象,这些对象记录了诸如LRU、锁、等待等方面的信息,而这个对象的内存需要从额外内存中申请。因此,当你申请了很大的Innodb缓冲池时,这个值也应该相应增加;
  简单理解为:额外缓冲池用于管理缓冲池的内容的,所以缓冲池越大额外换池也需要越大;
  总结:了解数据库的内存结构,为深入学习innodb奠定一个良好的理论基础;工作中很多人都不愿意学习理论性的基础,就像在学习数据库的时候,大部分人更倾向于学习一些sql语句修改:比如扩大表空间、修改数据文件。个人在学习的时候从来不记录这些语句的,毕竟需要用的时候网上搜索一箩筐,而是更喜欢记录一些原理性的东西,做到每个操作都胸有成竹;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-611610-1-1.html 上篇帖子: mysql innodb 性能优化 下篇帖子: mysql的审计功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表