mysql-5.7 saving and restore buffer pool state 详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-5.7 saving and restore buffer pool state 详解相关的知识,希望对你有一定的参考价值。

一、mysql 重启要面临的问题

  由于重启后之前innodb buffer pool中缓存的数据就都没有了,如果这个时候业务SQL来临,mysql就只能是从磁盘中

  读取数据到内存;可能要经过数个小时的时间内存中的数据才能是业务频繁要用的。行业中把这个内存从什么都没有

  到内存中都是热数据的这个过程叫作预热。可见在预热这个过程中数据库的性能是不怎么好的,对于内存(innodb buffer pool)

  越大的库预热的时间就越长

 

二、解决问题的思路

  说起来这个解决方法也是简单粗暴,方法就是mysql在正常关闭时把当前内存中页面信息(tableSpaceId,pageId),保存到磁盘;

  等到mysql启动的时候就根据之前保存的信息把磁盘中的数据加载到innodb buffer pool;

 

三、如何配置:

  前面讲解“解决问题的思路”的时候,提到了两个过程一个是关闭时保存,一下个启动时恢复,这个两过程各自对应着一个配置

  参数,还有一个参数就是用来控制innodb buffer pool中那些页面要被“保存”,“恢复” 这个是通过一个百分比控制的,这个也

  对应着一个参数

[mysqld]
#--------innodb buffer pool state
innodb_buffer_pool_dump_pct                     =25                         #指定innodb buffer pool 中要被保存|恢复的页面的百分比 
innodb_buffer_pool_dump_at_shutdown             =ON                         #指定是否启动关闭时保存信息这个工能
innodb_buffer_pool_load_at_startup              =ON                         #指定是否启用启动时恢复这个功能

 

四、对innodb_buffer_pool_dump_pct 的说明:

  innodb buffer pool 内部是由列表组织的,配置成25就是说列表中前面的那25%的页面要在关闭时保存它们的元信息(tablespaceid,pageid)

  这个的“前”是指的innodb buffer pool中的new 列表;关于innodb buffer pool的列表组织方式可以看我的另一个博客

  http://www.cnblogs.com/JiangLe/p/7392421.html

   

 

----

学习交流

技术分享

 

以上是关于mysql-5.7 saving and restore buffer pool state 详解的主要内容,如果未能解决你的问题,请参考以下文章

django rest框架中的save()、create()和update()有啥区别?

使用 REST 代理访问 Ext.data.Model.save() 回调中的 HTTP 响应

docker下搭建owncloud

Spring Data Rest Save 可迭代实体

WorkItem REST API 中是不是有 WorkItem.Save(SaveFlags.MergeAll) 的类似物?

save() 上的 Django Rest Framework 完整性错误,is_valid() 返回 true