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

Mysql 8.0 之调整 innodb buffer innodb_buffer_pool_size是一个内存区域,用来缓存InnoDB存储引擎的表中的数据和索引数据,以便提高对InnoDB存储引擎表中数据的查询访问速度。 阅读详情

前言

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

MySQL 版本:5.7.30

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

file

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

file

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

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

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

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

mysql>show global variables like 'innodb_buffer_pool%';

file

给分配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;

file

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

mysql>set global innodb_buffer_pool_size=13421772825;

file

调大不报错,正百思不得其解,经同事点播,可能是 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相关变量值

file

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

mysql>set global innodb_buffer_pool_size=13421772814;

file

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

总结及建议

  • 当 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群。

file

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

Ubuntu 14.04 Swap配置实战:文件方案、大小计算与swappiness调优 Swap是Linux内存管理的核心机制,通过将不活跃页面换出至磁盘,缓解物理内存压力并支撑休眠、OOM防护等关键功能。其原理依赖内核的页回收策略与vm.swappiness参数调控,在Ubuntu 14.04(内核3.13)中尤为敏感。技术价值在于提升系统稳定性与突发负载容忍度,广泛应用于Docker容器部署、VS Code大型项目加载、VMware虚拟机及老旧硬件运维等场景。本文聚焦Ubuntu 14.04这一仍被教学与生产环境广泛使用的LTS版本,详解Swap文件创建、科学容量计算、fstab安全配置及 阅读详情

相关推荐

快照不是备份:生产环境数据保护的底层逻辑与实操

数据备份是保障业务连续性的基础能力,其核心在于可移植性、时间纵深和可验证性;快照则是一种存储层瞬时状态捕获机制,依赖原始卷且缺乏独立校验能力。二者在RPO/RTO控制、恢复验证难度和灾备合规性上存在本质差异。原生备份方案(如pg_basebackup、XtraBackup)通过数据序列化与存储解耦,支撑跨环境恢复与自动化校验;而快照仅适合作为短期缓冲或误操作回滚辅助。真实生产中,混淆二者常导致灾备失效——例如快照元数据损坏后无可用备份、或未验证备份完整性致使恢复失败。本文结合MySQL与PostgreSQL

chudan0503的博客 437

CentOS 8 Stream 安装 MySQL 8.0 官方版完整指南

MySQL 是广泛使用的开源关系型数据库,其安装与配置在不同 Linux 发行版中存在显著差异。CentOS 8 Stream 因默认集成 MariaDB 并弃用 mysql 包名体系,导致传统 mysql安装教程 失效;用户若需部署特定版本(如 mysql installer 8.0.30),必须绕过系统仓库,直连 MySQL 官方 YUM 源。该方式可精准控制版本流、自动处理依赖(如 libaio、perl-Data-Dumper),并兼容 systemd 服务管理与 SELinux 安全策略。适用于开

chiman6219的博客 313

Ubuntu 20.04部署MySQL 8.0:systemd管理、认证插件与安全配置全解析

MySQL 是最主流的开源关系型数据库,其在 Linux 系统中的部署远不止执行一条安装命令——尤其在 Ubuntu 20.04 这一广泛用于生产环境的 LTS 版本中,MySQL 8.0 默认采用 systemd 服务管理机制和 caching_sha2_password 认证插件,导致大量开发者遭遇 'Access denied'、远程连接失败或客户端兼容性问题。理解 MySQL 服务生命周期、认证协议演进与系统级安全策略(如 ufw 防火墙、mysql_secure_installation 加固流程

weixin_33894640的博客 553

innodb_buffer_pool_size为什么无法调低至1GB以内

前言 innodb_buffer_pool_size可以调大,却不能调小至1GB以内,这是为什么? MySQL 版本:5.7.30 测试环境有台 MySQL 服务器反应很慢,检查系统后发现内存使用量已超过90%,并且有大量的SWAP占用: 运行top按内存占用排序,查看系统资源使用情况 可以看到内存占用最多的是java进程和4个mysqld进程。 由于短期内无法加内存,java内存大小应用不让调整,那就只能想办法压缩mysqld使用的内存大小了。 这台服务器部署了4个 MySQL 实例,其中两个是轻

GreatDB的博客 555

宝塔面板深度解析:从核心架构到实战运维的完整指南

服务器运维是网站开发与部署的基础环节,其核心在于高效管理Web服务器、数据库及运行环境。传统命令行操作门槛较高,而服务器管理面板通过可视化界面,将复杂的配置与监控任务封装为简易操作,显著降低了运维技术门槛,提升了建站与管理效率。这类工具尤其适用于个人开发者、中小企业及运维人员,能快速部署应用、监控资源、管理安全。本文聚焦于宝塔面板这一热门工具,深入剖析其作为“服务器可视化控制中心”的架构原理,涵盖LNMP环境部署、网站管理、数据库优化及安全防护等核心应用场景,并结合Nginx配置与MySQL性能调优等热词,

weixin_34342992的博客 666

【JESD79-5之】8 AC & DC 输入测量标准(AC & DC Input Measurement Levels)

时钟被驱动到DRAM,可以通过L/RDIMM模块的RCD来实现,也可以通过U/SODIMM模块的主机来实现(图184)。接收机DQS(脉冲)输入电压灵敏度测试提供了在没有码间干扰(ISI),抖动(Rj, Dj, DCD)和串扰噪声的情况下测试接收机对不同输入电压的灵敏度的方法。接收机数据输入电压灵敏度测试提供了在没有符号间干扰(ISI),抖动(Rj, Dj, DCD)和串扰噪声的情况下测试接收机对不同输入电压的灵敏度的方法。

m0_61126667的博客 1705

mysql innodbuffer修改_mysql修改innodb_buffer_pool_size无效

mysql在启动的时候总是报2015-06-04 14:44:21 12771 [Note] InnoDB: Initializing buffer pool, size = 128.0MInnoDB: mmap(137363456 bytes) failed; errno 122015-06-04 14:44:21 12771 [ERROR] InnoDB: Cannot allocate me...

weixin_39943750的博客 416

Windows 11下JDK 21与JMeter 5.6.3环境配置全攻略

环境变量是操作系统管理软件路径与执行权限的核心机制,它通过预设的键值对,指引系统在调用命令时定位可执行文件。理解其工作原理,是解决软件安装后“命令未找到”等问题的关键。对于Java生态而言,正确配置JAVA_HOME和Path变量,不仅能让java、javac等基础命令全局可用,更是Maven、Gradle乃至JMeter等众多工具链顺畅运行的基石。JMeter作为一款基于Java开发的经典性能测试与接口测试工具,其稳定运行高度依赖健全的Java环境。本文聚焦于在Windows 11系统上,为JDK 21与

weixin_30940783的博客 450

MySQL插入性能优化

MySQL插入性能优化 标签: 博客 文章目录MySQL插入性能优化代码优化values 多个一个事务插入字段尽量少,尽量用默认值关闭 unique_checksbulk_insert_buffer_size配置优化innodb_buffer_pool_size 缓冲区配置什么是 innodb_buffer_pool_size设置多大的 innodb_buffer_pool_size 合适?...

蒋先生 917

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)

一、 PCIE系统架构 1.1 PCIE分层结构 PCIE结构 1.2 TLP包 四种TLP类型。 Memory (内存空间操作) IO (IO空间操作) Configuration (配置操作) Message (信息操作) 四种类型TLP,如果有需要响应,称为Non-Posted TLP,如果没有需要响应,称为Posted TLP。 TLP包类型 1.2.1 TLP结构 TLP数据格式 1.2.2 Header各个字段的含义 Header格式 ...

huangshanhu的博客 3433

3D Slicer-最强大的开源医学图像分割工具简要概述

3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。读/写DICOM图像和多种其他格式;三维图像、多边形网格和体积渲染的交互式可视化;手动编辑和标记图像;使用刚性和非刚性算法融合和共同配准数据;图像自动分割;跟踪图像引导程序的设备。所有的功能模块可在工具栏里找到,提供搜索,下拉选择,左右切换等功能。3D slicer的大概情况就介绍到这里。它的功能非常强大,也没有必要说掌握每个功能的使用。

Tina姐的博客 2万+

mysql innodb_buffer_pool_size 大小设置问题

** mysql innodb_buffer_pool_size 大小设置问题 ** 前几天测试环境起了个新的实例由于测试环境服务器配置较低打算把innodb_buffer_pool_size设置为500M,发生报错 ERROR 1231 (42000): Variable ‘innodb_buffer_pool_size’ can’t be set to the value of ‘5368...

weixin_42050250的博客 4866

Zotero PDF Translate插件实战:DeepL API免费申请与高效翻译配置指南

本文提供Zotero PDF Translate插件配置DeepL API的完整实战指南。详细介绍了如何免费申请DeepL API密钥,解决国内访问问题,并在插件中完成精细配置,实现文献阅读时的无缝划词翻译,大幅提升科研人员和学生的英文文献阅读效率。

rum55的博客 458

MySQL服务启动失败排查指南:从日志分析到故障恢复的实战手册

数据库服务启动失败是运维和开发中常见的故障场景,其背后涉及系统资源、配置管理、存储引擎等多个技术层面。从原理上讲,服务启动过程需要依次完成配置加载、资源申请、存储引擎初始化等步骤,任一环节出错都可能导致失败。掌握系统化的排查方法具有重要技术价值,能极大缩短故障恢复时间,保障业务连续性。在实际应用场景中,工程师需要从错误日志入手,依次检查文件权限、端口占用、配置文件语法、InnoDB引擎状态和系统资源等关键点。本文聚焦MySQL启动失败的典型问题,深入解析权限不足、端口冲突、InnoDB表空间损坏等常见故障的

weixin_34378767的博客 388

游戏市场销售数据抓取:使用Python爬虫获取游戏市场上的销售情况和玩家反馈

在本文中,我们使用Python爬虫抓取了多个游戏平台上的销售数据、玩家反馈和游戏动态。通过使用requests和Selenium,我们能够有效地获取静态和动态网页数据,并利用pandas进行数据处理和存储。如果您有更具体的需求,可以扩展此爬虫以抓取更多的数据,进行深度分析或实现更复杂的可视化功能。数据抓取是一项非常强大的技术,它不仅能够帮助游戏开发者优化产品,还能帮助营销团队理解玩家需求,提升市场竞争力。

2201_76125261的博客 1308

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2120

Ubuntu 22.04 搭建高性能 LOMP 栈:OpenLiteSpeed + MariaDB + PHP 8.1

LOMP(Linux + OpenLiteSpeed + MariaDB + PHP)是一种面向现代 PHP 应用的轻量级 Web 服务架构,其核心在于以事件驱动、内置 PHP SAPI 的 OpenLiteSpeed 替代传统 Apache 或 Nginx,显著降低 IPC 开销与内存占用;结合 MariaDB 的生产就绪默认配置和 Ubuntu 22.04 LTS 的稳定内核与 PHP 8.1 生态,形成兼顾性能、安全与可维护性的原生部署方案。该架构特别适用于 WordPress、ThinkPHP、La

weixin_34101784的博客 341

# 【WorkBuddy专栏33】工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

工作空间,最大的WorkBuddy技巧——任务隔离、记忆分区与多项目管理实战

AI人人懂 2133

Ubuntu 18.04部署Nextcloud:LAMP栈深度调优与生产级配置

Nextcloud作为主流开源私有云平台,其自托管部署本质是Web应用栈(Apache+PHP+MariaDB+Redis)的协同工程。理解PHP-FPM进程模型、OPcache内存管理、InnoDB日志机制及Redis缓存策略,是保障高并发文件同步与WebDAV服务稳定的核心。本文聚焦Ubuntu 18.04这一典型LTS环境,解析如何在受限系统版本下完成组件精准对齐、安全加固与性能调优,覆盖从HTTP/2启用、.htaccess重写生效到occ命令链式运维等关键实践,适用于遗留系统迁移、边缘NAS升级及

weixin_30267785的博客 472

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Ubuntu 14.04 LEMP栈搭建与协议级调优实战

LEMP(Linux + Nginx + MySQL + PHP)是中小型Web服务的经典技术栈,其核心价值在于Nginx的事件驱动模型对高并发静态资源的高效分发能力,以及组件间基于Unix socket、FastCGI、InnoDB缓冲池等协议级协同带来的稳定性。在老旧系统运维、工业网关、长生命周期遗留系统等场景中,理解Ubuntu 14.04这一Upstart时代LTS版本特有的服务管理机制、ABI兼容约束与ext4文件系统协同特性尤为关键。本文聚焦mysql安装配置教程、nginx安装配置等高频实践需

hck341204的专栏 384

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

GBase 8a MPP数据库实战部署指南:从环境准备到集群调优

列式存储与MPP(大规模并行处理)架构是构建现代高性能分析型数据库的核心技术。列式存储通过按列组织数据,在查询时仅读取所需列,大幅提升了I/O效率,特别适合聚合、统计等分析场景。MPP架构则将数据和计算任务水平拆分到多个节点并行处理,实现了线性扩展能力,有效应对海量数据分析需求。这些技术共同构成了数据仓库和商业智能系统的底层引擎,为企业级OLAP应用提供支撑。在国产数据库领域,GBase 8a正是基于这些技术构建的MPP数据库代表。本文将结合内核参数调优、集群配置等实战经验,详细解析GBase 8a的完整部

weixin_34162228的博客 510

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

UNION和UNION ALL性能差异与选型决策指南

UNION和UNION ALL是SQL中基础但极易误用的集合操作符,其核心区别在于是否执行去重(DISTINCT)。从数据库原理看,UNION本质是UNION ALL加排序或哈希去重,涉及内存分配、临时磁盘IO、执行计划变更等底层开销;技术价值体现在保障数据正确性与规避性能雪崩的平衡。典型应用场景包括报表去重计数、多源用户ID合并、ETL中间表拼接及实时事件流聚合。当重复率低、数据量大或业务允许冗余时,UNION ALL可提升数倍性能;而涉及唯一性约束、递归查询去环或口径强一致需求时,UNION不可替代。本

weixin_30781107的博客 357

生产环境从零搭建系统:运维工程师的完整生命周期方法论

运维工程师的核心职责,不是简单执行装机命令,而是以完整生命周期的视角,把一个业务系统从无到有托起,并持续保障其稳定运行。生产环境的系统搭建,从硬件选型、网络规划到系统初始化、中间件部署,每一步都需要基于业务诉求做出取舍;上线之后,监控告警、备份恢复、安全基线、变更管理更是日常运维的闭环关键。这套方法论不仅能帮助应届生构建校招笔试的高分答题框架,也能为初入行的运维提供可落地的实践路径。理解从规划、搭建、接入到维护、优化的全链路逻辑,才能真正具备生产环境思维,在面对故障时快速定位、从容恢复,并持续演进系统架构。

weixin_34037515的博客 464

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

MySQL调优之innodb_buffer_pool_size大小设置

MySQL调优之innodb_buffer_pool_size大小设置 相关查看命令 sql> show global variables like 'innodb_buffer_pool_size'; sql> show global status like 'Innodb_buffer_pool_pages_data'; sql> show global status like 'In

sunny05296的博客 9万+

解决:Mysql exceeds the lock table size 不指定

故障现象 view plainprint? mysql> delete FROM `tablesname` WHERE datetime ERROR 1206 (HY000): The total number of locks exceeds the lock table size   解决步骤 1、锁表写操作 view plainprint? mysql> lock ta

xiao4816的博客 1083
上一篇: 万答#11,MySQL中char与varchar有什么区别
下一篇: 万答#2,一样的Python代码,为什么可以删表,却不能更新数据
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值