前言

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

MySQL 版本:5.7.30

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

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

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

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

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

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

mysql>show global variables like 'innodb_buffer_pool%';

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

从MySQL 5.7开始,innodb_buffer_pool_size必须等于innodb_buffer_pool_chunk_size *innodb_buffer_pool_instances的整数倍才行,详见官网说明(https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html)。

mysql>set global innodb_buffer_pool_size=13421772822;

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

mysql>set global innodb_buffer_pool_size=13421772825;

调大不报错,正百思不得其解,经同事点播,可能是 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_instances已变成1,再次调低 innodb_buffer_pool_size

mysql>set global innodb_buffer_pool_size=13421772814;

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

总结及建议

  • 当 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)

https://mp.weixin.qq.com/s/66u5K7a9u8GcE2KPn4kCaA

技术分享 | 万里数据库MGR Bug修复之路

https://mp.weixin.qq.com/s/IavpeP93haOKVBt7eO8luQ

Macos系统编译percona及部分函数在Macos系统上运算差异

https://mp.weixin.qq.com/s/jAbwicbRc1nQ0f2cIa_2nQ

技术分享 | 利用systemd管理MySQL单机多实例

https://mp.weixin.qq.com/s/iJjXwd0z1a6isUJtuAAHtQ

产品 | GreatSQL,打造更好的MGR生态

https://mp.weixin.qq.com/s/ByAjPOwHIwEPFtwC5jA28Q

产品 | GreatSQL MGR优化参考

https://mp.weixin.qq.com/s/5mL_ERRIjpdOuONian8_Ow

关于 GreatSQL

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

Gitee:

https://gitee.com/GreatSQL/GreatSQL

GitHub:

https://github.com/GreatSQL/GreatSQL

微信&QQ群:

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

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

技术分享 | innodb_buffer_pool_size为什么无法调低至1GB以内的更多相关文章

  1. 恒天云技术分享系列3 – KVM性能调优

    恒天云技术分享:http://www.hengtianyun.com/download-show-id-11.html KVM是什么 KVM 是 kernel-based Virtual Machin ...

  2. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...

  3. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  4. UWA 技术分享连载 转载

    技术分享连载1 Q1:Texture占用内存总是双倍,这个是我们自己的问题,还是Unity引擎的机制? Q2:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Updat ...

  5. 美团技术分享:深度解密美团的分布式ID生成算法

    本文来自美团技术团队“照东”的分享,原题<Leaf——美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息ID生成算法和生成策略 ...

  6. 融云技术分享:解密融云IM产品的聊天消息ID生成策略

    本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...

  7. 老J的技术分享之总结

    老J做IT这块有二十多个年头了,算是中国IT的见证者与参与者.那个时候刚开始接触和了解时,对于他的一些建议,我不是很乐于去接受,因为我觉得他的那一套技术体系不是很适合如今的情况,当时间久了后发现,他对 ...

  8. 技术分享 | Update更新慢、死锁等问题的排查思路分享

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 一.简介 在开始排错之前我们需要知道 Update 在 MySQL 中的生命周期 ...

  9. 网易视频云技术分享:linux软raid的bitmap分析

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

随机推荐

  1. 896.Montonic Array - LeetCode

    Question 896. Monotonic Array Solution 题目大意: 类似于数学中的减函数,增函数和物理中的加速度为正或为负 思路: 先比较前两个是大于0还是小于0,如果等于0就比 ...

  2. python之模块(hashlib、logging)

    hashlib模块 加密的概念 加密,是以某种特殊的算法改变原有的数据,当其他人获得数据时,也无法了解数据的内容.简单的来说,就是将明文(人看得懂)数据通过一些手段变成密文数据(人看不懂),密文数据的 ...

  3. Fail2ban 配置详解 过滤器配置

    Fail2ban自带了很多相关服务日志的过滤器. ### # 包含配置 ### [INCLUDES] before = common.conf # 还包含其他文件中的配置,在加载本配置文件中配置之前先 ...

  4. Vue关闭语法检测

    为什么?为了防止写到一半保存,报错.关闭默认的语法检测 新建vue.config.js 1.vue.config.js的作用是允许你修改脚手架中wekpack的默认参数. 2.vue.config.j ...

  5. 深度学习可视化工具--tensorboard的使用

    tensorboard的使用 官方文档 # writer.add_scalar() # 添加标量 """ Args: tag (string): Data identif ...

  6. 攻防世界pwn题:forgot

    0x00:查看文件信息 该文件是32位的,canary和PIE保护机制没开. 0x01:用IDA进行静态分析 总览: 该函数就是:v5初值为1,对v2输入一串字符.然后执行一个会根据输入的字符串而修改 ...

  7. Node.js安装与环境配置

    废话不多少直接上干货.坐车扶稳, 当然你要知道Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.其次Node.js是一个事件驱动I/O服务端JavaScript环境, ...

  8. React中http-proxy-middleware代理使用

    React项目npm run start启动本地服务后浏览器访问http://localhost:3000 start命令也可自定义port指定本地运行端口(eg: PORT=3002) 对于单点登录 ...

  9. GDKOI 2021 Day1 TG 。。。

    看着一群群比 LHF , HQX 还强的大佬涌进了机房,本蒟蒻表示慌得一批 T1 讲题人说最简单的签到题本蒟蒻表示... \(Update\) 用 ds , dt 两个变量记录点 i 连向 s 或 t ...

  10. 迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅

    通过在互联网上收集及微软官方网站等途径获取相关资料进行整理汇总出Microsoft SQL Server各个版本(SQL Server 2008 R2.SQL Server 2012.SQL Serv ...