返回顶部
首页 > 资讯 > 数据库 >MySQL 5.7中如何动态修改innodb_buffer_pool大小
  • 568
分享到

MySQL 5.7中如何动态修改innodb_buffer_pool大小

2024-04-02 19:04:59 568人浏览 安东尼
摘要

Mysql 5.7中如何动态修改innodb_buffer_pool大小,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Mysql 5.7中如何动态修改innodb_buffer_pool大小,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

mysql5.7版本开始支持buffer pool动态调整大小,每个buffer_pool_instance都由同样个数的chunk组成(chunks数组), 每个chunk内存大小为innodb_buffer_pool_chunk_size(实际会偏大5%,用于存放chuck中的block信息)。
buffer pool以innodb_buffer_pool_chunk_size为单位进行动态增大和缩小。调整前后innodb_buffer_pool_size应一直保持是innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的倍数。

实验如下:

C:\Users\duansf>mysql -u root -p
Enter passWord: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.17-log MySQL CommUnity Server (GPL)


Copyright (c) 2000, 2016, oracle and/or its affiliates. All rights reserved.


Oracle is a reGIStered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show variables like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size       | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON             |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_dump_pct         | 25             |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_instances        | 1              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | ON             |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 134217728      |
+-------------------------------------+----------------+
10 rows in set, 1 warning (0.61 sec)


mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 134217728 |
+---------------------------+
1 row in set (0.00 sec)



 将innodb_buffer_pool_size从 134217728 扩大到 268435456


mysql> SET GLOBAL innodb_buffer_pool_size=268435456;
Query OK, 0 rows affected (0.02 sec)


mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 268435456 |
+---------------------------+
1 row in set (0.00 sec)



-- 查看日志记录(.err结尾的文件)
2017-03-09T05:41:50.036769Z 6 [Note] InnoDB: Requested to resize buffer pool. (new size: 268435456 bytes)
2017-03-09T05:41:50.067742Z 0 [Note] InnoDB: Resizing buffer pool from 134217728 to 268435456 (unit=134217728).
2017-03-09T05:41:50.068754Z 0 [Note] InnoDB: Disabling adaptive hash index.
2017-03-09T05:41:50.229853Z 0 [Note] InnoDB: disabled adaptive hash index.
2017-03-09T05:41:50.230853Z 0 [Note] InnoDB: Withdrawing blocks to be shrunken.
2017-03-09T05:41:50.230853Z 0 [Note] InnoDB: Latching whole of buffer pool.
2017-03-09T05:41:50.231853Z 0 [Note] InnoDB: buffer pool 0 : resizing with chunks 1 to 2.
2017-03-09T05:41:50.257873Z 0 [Note] InnoDB: buffer pool 0 : 1 chunks (8192 blocks) were added.
2017-03-09T05:41:50.274899Z 0 [Note] InnoDB: Completed to resize buffer pool from 134217728 to 268435456.
2017-03-09T05:41:50.275895Z 0 [Note] InnoDB: Re-enabled adaptive hash index.
2017-03-09T05:41:50.276895Z 0 [Note] InnoDB: Completed resizing buffer pool at 170309 13:41:50.


加大buffer pool的过程大致如下:
1、以innodb_buffer_pool_chunk_size为单位,分配新的内存pages;
2、扩展buffer pool的AHI(adaptive hash index)链表,将新分配的pages包含进来;
3、将新分配的pages添加到free list中;


将innodb_buffer_pool_size从268435456缩减回134217728

mysql> SET GLOBAL innodb_buffer_pool_size=134217728;
Query OK, 0 rows affected (0.00 sec)


mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 134217728 |
+---------------------------+
1 row in set (0.00 sec)


-- 查看日志记录(.err结尾的文件)
2017-03-09T05:57:42.759623Z 6 [Note] InnoDB: Requested to resize buffer pool. (new size: 134217728 bytes)
2017-03-09T05:57:42.759623Z 0 [Note] InnoDB: Resizing buffer pool from 268435456 to 134217728 (unit=134217728).
2017-03-09T05:57:42.761625Z 0 [Note] InnoDB: Disabling adaptive hash index.
2017-03-09T05:57:42.762626Z 0 [Note] InnoDB: disabled adaptive hash index.
2017-03-09T05:57:42.762626Z 0 [Note] InnoDB: Withdrawing blocks to be shrunken.
2017-03-09T05:57:42.763627Z 0 [Note] InnoDB: buffer pool 0 : start to withdraw the last 8192 blocks.
2017-03-09T05:57:42.765642Z 0 [Note] InnoDB: buffer pool 0 : withdrawing blocks. (8192/8192)
2017-03-09T05:57:42.765642Z 0 [Note] InnoDB: buffer pool 0 : withdrew 8192 blocks from free list. Tried to relocate 0 pages (8192/8192).
2017-03-09T05:57:42.767636Z 0 [Note] InnoDB: buffer pool 0 : withdrawn target 8192 blocks.
2017-03-09T05:57:42.767636Z 0 [Note] InnoDB: Latching whole of buffer pool.
2017-03-09T05:57:42.768631Z 0 [Note] InnoDB: buffer pool 0 : resizing with chunks 2 to 1.
2017-03-09T05:57:42.772633Z 0 [Note] InnoDB: buffer pool 0 : 1 chunks (8192 blocks) were freed.
2017-03-09T05:57:42.772633Z 0 [Note] InnoDB: Completed to resize buffer pool from 268435456 to 134217728.
2017-03-09T05:57:42.773633Z 0 [Note] InnoDB: Re-enabled adaptive hash index.
2017-03-09T05:57:42.774648Z 0 [Note] InnoDB: Completed resizing buffer pool at 170309 13:57:42.


缩减buffer pool的过程大致如下:
1、重整buffer pool,准备回收pages;
2、以innodb_buffer_pool_chunk_size为单位,释放删除这些pages(这个过程会有一点点耗时);
3、调整AHI链表,使用新的内存地址。


附:resize的详细流程如下:
如果开启了AHI,需禁用AHI
如果是收缩内存
计算需收缩的chunk数, 从chunks开始尾部删除指定个数的chunk.
buf_pool
从free_list中摘除待删chunk的page放入待删链表buf_pool->withdraw
如果待删chunk的page为脏页,则刷脏
重新加载LRU中要删除的页,从LRU中摘除,重新从free列表获取page老的page放入待删链表buf_pool->withdraw
释放buffer pool锁
如果需收缩的chunk pages没有收集全,重复2-6
开始resize
锁住所有instance的buffer_pool,page_hash
收缩pool:以chunk为单位释放要收缩的内存
清空withdraw列表buf_pool->withdraw
增大pool:分配新的chunk
重新分配buf_pool->chunks
如果改变/缩小超过2倍,会重置page hash,改变桶大小
释放buffer_pool,page_hash锁
如果改变/缩小超过2倍,会重启和buffer pool大小相关的内存结构,如锁系统(lock_sys_resize),AHI(btr_search_sys_resize), 数据字段(dict_resize)等
如果禁用了AHI,此时开启

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 5.7中如何动态修改innodb_buffer_pool大小

本文链接: https://lsjlt.com/news/66336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL 5.7中如何动态修改innodb_buffer_pool大小
    MySQL 5.7中如何动态修改innodb_buffer_pool大小,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2024-04-02
  • mysql 5.7 新特性中在线in-place 修改字段的大小
    VARCHAR 字段的大小能够通过 ALTER TABLE,命令,以in-place 的方式修改, 例如 : ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN ...
    99+
    2024-04-02
  • jQuery如何动态改变图片显示大小
    小编给大家分享一下jQuery如何动态改变图片显示大小,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!当我们要显示后台传过来若干个...
    99+
    2024-04-02
  • mysql如何修改为大小写不敏感?
    我们有时会面临需要对mysql数据库设置为大小写不敏感,比较常见的例如:在Linux下,MySQL的表名区分大小写,而在Windows下是不区分,有时候在Linux上查询大写表名时就会出现找不到表的情...
    99+
    2023-09-01
    mysql 数据库 linux
  • mysql 如何动态修改复制过滤器
    MySQL动态修改复制过滤器     说说今天遇到的问题吧,今天在处理一个业务方的需求,比较变态,我大概描述一下: 线上的阿里云rds上面有个游戏的日志库,里面的表都是日表的形式,数据量...
    99+
    2022-05-12
    MySQL 修改复制过滤器 MySQL 复制过滤器
  • react如何动态修改style
    这篇文章主要介绍“react如何动态修改style”,在日常操作中,相信很多人在react如何动态修改style问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”react如何动态修改style”的疑惑有所帮助!...
    99+
    2023-07-04
  • SpringBoot如何动态修改Scheduled
    这篇文章主要介绍“SpringBoot如何动态修改Scheduled”,在日常操作中,相信很多人在SpringBoot如何动态修改Scheduled问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringB...
    99+
    2023-07-06
  • 如何在html中修改字体大小
    这篇文章将为大家详细讲解有关如何在html中修改字体大小,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适...
    99+
    2023-06-14
  • 如何在css中修改字体大小
    今天就跟大家聊聊有关如何在css中修改字体大小,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。font-size 属性用于设置字体大小。常用属性值:smaller   &nb...
    99+
    2023-06-15
  • jquery中如何动态修改css样式
    小编给大家分享一下jquery中如何动态修改css样式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!jquery动态修改css样...
    99+
    2024-04-02
  • SpringBoot如何动态修改Scheduled(系统启动默认执行,动态修改)
    SpringBoot 动态修改Scheduled 场景: 可配置的 Scheduled 执行时间,正常的 Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更...
    99+
    2024-04-02
  • 微信小程序中如何实现JS动态修改样式
    这篇文章主要为大家展示了“微信小程序中如何实现JS动态修改样式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中如何实现JS动态修改样式”这篇文章吧。微...
    99+
    2024-04-02
  • 如何修改php上传大小
    这篇文章主要介绍了如何修改php上传大小的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何修改php上传大小文章都会有所收获,下面我们一起来看看吧。一、查看当前上传文件大小限制在进行修改之前,我们需要先了解当前...
    99+
    2023-07-05
  • pycharm如何修改字体大小
    pycharm允许调整编辑器字体大小,以提高可读性和开发体验。步骤包括:打开“设置”窗口并导航到“字体”设置。选择所需字体并输入大小(以 pt 或 px 为单位)。单击“应用”以保存更改...
    99+
    2024-04-18
    pycharm 代码可读性
  • jquery如何动态修改样式
    在jquery中动态修改样式的方法:1.新建html项目,引入jquery;2.创建div标签,设置id属性;3.通过id获取对象,使用css方法动态修改样式;具体步骤如下:首先,新建一个html项目,并在项目中引入jquery;<s...
    99+
    2024-04-02
  • css如何修改按钮的大小
    在css中修改按钮的大小的方法:1.创建按钮;2.使用width和height属性设置按钮宽高;在css中修改按钮的大小的方法首先,在页面中创建两个按钮,并分别定义class类用于对比; <body> &nb...
    99+
    2024-04-02
  • Linux时间片大小如何修改
    Linux中时间片的大小是由内核调度器决定的,并且通常情况下不建议修改时间片的大小。时间片的大小决定了每个进程被分配到CPU的时间长...
    99+
    2023-09-22
    Linux
  • jquery如何拖动改变div大小
    这篇文章将为大家详细讲解有关jquery如何拖动改变div大小,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下<html>  <he...
    99+
    2024-04-02
  • vue如何动态修改meta的title
    目录如何动态修改meta的title动态修改路由的meta.title需求解决办法如何动态修改meta的title 需求:不去掉原生导航栏的情况下实现详情页的动态title(列表页q...
    99+
    2024-04-02
  • vue如何动态修改$router参数
    目录vue动态修改$router参数动态修改router路由所带参数vue动态修改$router参数 // 创建一个包含当前 URL 参数的对象 export const getUR...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作