likes
comments
collection
share

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

作者站长头像
站长
· 阅读数 9

前言

innodb_buffer_pool_size可以调大,却不能调小至1GB以内,这是为什么?

MySQL 版本:5.7.30

测试环境有台 MySQL 服务器反应很慢,检查系统后发现内存使用量已超过90%,并且有大量的SWAP占用:

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

运行top按内存占用排序,查看系统资源使用情况

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

可以看到内存占用最多的是java进程和4个mysqld进程。

由于短期内无法加内存,java内存大小应用不让调整,那就只能想办法压缩mysqld使用的内存大小了。

这台服务器部署了4个 MySQL 实例,其中两个是轻量级应用,数据量非常少,但当时创建的时候配置文件使用的是相同的配置,所以先拿这两个开刀。

执行下面的命令查看当前innodb buffer pool值

mysql>show global variables like 'innodb_buffer_pool%';

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

给分配1GB,并不算大(服务器内存16G),但这个实例里交易量和数据量都很小,先试试砍半吧。

从MySQL 5.7开始,innodb_buffer_pool_size必须等于innodb_buffer_pool_chunk_size *innodb_buffer_pool_instances的整数倍才行,详见官网说明(dev.mysql.com/doc/refman/…

mysql>set global innodb_buffer_pool_size=13421772822;

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

没想到,居然报错了!难道是BUG?试试调大innodb_buffer_pool_size

mysql>set global innodb_buffer_pool_size=13421772825;

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

调大不报错,正百思不得其解,经同事点播,可能是 innodb_buffer_pool_instances 的设置值导致的(官网描述 innodb_buffer_pool_instances 必须在 innodb_buffer_pool_size 大于等于 1G 时才生效),也就是说:

因为innodb_buffer_pool_instances 值为 2,因此 innodb_buffer_pool_size必须大于1GB。

为印证猜测,将innodb_buffer_pool_instances改成1,修改配置文件后重启实例,查看innodb_buffer_pool相关变量值

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

可以看到innodb_buffer_pool_instances已变成1,再次调低 innodb_buffer_pool_size

mysql>set global innodb_buffer_pool_size=13421772814;

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

这次设置成功了,说明我们的猜测是正确的。

总结及建议

  • 当 innodb_buffer_pool_size 值低于 1GB时,没必要也不能设置 innodb_buffer_pool_instances 值大于等于 2。

  • 一般而言,当 innodb_buffer_pool_size 值不高于 8GB时,没必要设置 innodb_buffer_pool_instances 值大于 1。

  • 通常,当 innodb_buffer_pool_size 较大时(大于64GB),innodb_buffer_pool_instances 设置为 8 是个比较合理的值。

Enjoy MySQL :)

文章推荐:

技术分享 | MGR最佳实践(MGR Best Practice) mp.weixin.qq.com/s/66u5K7a9u…

技术分享 | 万里数据库MGR Bug修复之路 mp.weixin.qq.com/s/IavpeP93h…

Macos系统编译percona及部分函数在Macos系统上运算差异 mp.weixin.qq.com/s/jAbwicbRc…

技术分享 | 利用systemd管理MySQL单机多实例 mp.weixin.qq.com/s/iJjXwd0z1…

产品 | GreatSQL,打造更好的MGR生态 mp.weixin.qq.com/s/ByAjPOwHI…

产品 | GreatSQL MGR优化参考 mp.weixin.qq.com/s/5mL_ERRIj…

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: gitee.com/GreatSQL/Gr…

GitHub: github.com/GreatSQL/Gr…

微信&QQ群:

可扫码添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群,亦可直接扫码加入GreatSQL/MGR交流QQ群。

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内

本文由博客一文多发平台 OpenWrite 发布!

转载自:https://juejin.cn/post/7036176195444015140
评论
请登录