PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 版本历史 全部 5.x 稳定版本
    • 插件市场 社区插件
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 35 篇文章
    • MySQL 15 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 4 篇文章
    • ProxySQL 3 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • MySQL 优化中心 Markdown 索引、指标、参数、故障
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
资源 › MySQL 优化中心 › MariaDB / MySQL InnoDB 内存计算器

MariaDB / MySQL InnoDB 内存计算器

根据实际设置计算 InnoDB 和服务器内存场景。预填值仅用于演示 16 GiB 服务器,并非配置建议。

二进制单位:1 GiB = 1024 MiB。支持字节数或 K/M/G/T,例如 268435456、256M、8G。计算仅在浏览器中进行。

启用 JavaScript 以使用计算器。下方说明和查询仍可阅读。

服务器与并发
InnoDB 内存

缓冲池和日志缓冲区为全局分配。10% 预留是 MySQL 文档中的近似值,并非 MariaDB 常数。补充未计入的字典、锁、事务、自适应哈希和压缩内存。不要重复计入已包含缓冲池的测量值。

其他全局内存
每个连接的基础内存

每连接一个线程的模型:线程栈 + 两个初始网络缓冲区 + 摘要 + 额外预留。线程池需要调整。网络缓冲区可能增长;请在连接预留或查询内存中计入增长。

每个活动查询的缓冲区

这些缓冲区按需分配。按实际执行计划调整数量;未使用的操作填 0。额外内存覆盖数据包、SQL 文本、BLOB、binlog 和尚未计入的分配。复杂连接可能需要多个缓冲区。

临时表

MariaDB 和 MEMORY:每张表使用 min(tmp_table_size, max_heap_table_size),并非每会话限制。TempTable 使用共享 RAM 限制,不使用 max_heap_table_size。MySQL 8.0.28 之前 tmp_table_size 不限制 TempTable。本地内存块通常为 1 MiB 或更大,位于 RAM 限制之外,可保留至线程退出。mmap 和用户 MEMORY 表需要额外预留。

可选测量值,独立于计算

0 表示没有测量值。监测计数器仅涵盖被跟踪的分配;总和不是 RSS。测量值不会叠加到模型中。

场景结果

InnoDB 内存
负载场景
max_connections 压力场景
场景余量
全局分配与预留
连接基础内存
活动查询缓冲区
临时表与本地内存块
数据库服务器预算
当前已监测的 InnoDB 内存
当前进程 RSS

估算,并非保证的最大值

负载、会话覆盖设置和未监测的分配可能超出此模型。压力场景采用相同操作数量,将所有连接视为活动连接。请在代表性负载下验证 RSS、cgroup 限制、swap 和峰值。redo/undo 文件及 innodb_redo_log_capacity 表示存储空间,并非等量 RAM 分配。

公式与假设

C = 连接数;A = 活动查询数;T = 每查询临时表数。各项预留只计入一次。

InnoDB = innodb_buffer_pool_size × (1 + overhead / 100) + innodb_log_buffer_size + dictionary + locks + transactions + adaptive_hash + compression + InnoDB_extra G = InnoDB + key_buffer_size + aria_pagecache_buffer_size (MariaDB) + query_cache_size (MariaDB / MySQL 5.7) + other_global B = thread_stack + 2 × net_buffer_length + max_digest_length + session_extra Q = sort_buffer_size × sorts + join_buffer_size × joins + read_buffer_size × scans + read_rnd_buffer_size × random_reads + query_extra Total = G + C × B + A × Q + Temp Stress: C = A = max_connections

准确估算 InnoDB 内存

InnoDB 内存不仅是 innodb_buffer_pool_size。计算器计入缓冲池、可调整的管理结构预留、全局 innodb_log_buffer_size,以及您填写的其他 InnoDB 分配。MySQL 文档描述缓冲池结构约需额外 10% 内存;实际值取决于构建和负载,MariaDB 尤其需要实际验证。请使用正在运行的实际值,缓冲池大小经过舍入后可能与配置值不同。

数据字典、自适应哈希、锁、事务结构和压缩可能增加内存。仅补充尚未计入缓冲池或预留的分配。redo 容量、redo 文件和 undo 表空间属于磁盘资源;不要将文件大小当作 RAM。InnoDB 小计不包含其他引擎、Performance Schema、连接及查询缓冲区或操作系统。

读取运行设置

以下语句只读取数据。SHOW ... WHERE 会忽略不支持的变量。Threads_running 包括测量查询且只是瞬时值;请采用代表性并发和记录的峰值。Max_used_connections 是连接峰值,并非活动查询峰值。也要检查应用连接的会话设置:当前会话不能代表所有会话。

SELECT VERSION();
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
  'innodb_buffer_pool_size', 'innodb_log_buffer_size', 'innodb_page_size',
  'key_buffer_size', 'aria_pagecache_buffer_size', 'query_cache_size',
  'max_connections', 'thread_handling', 'thread_stack', 'net_buffer_length',
  'max_digest_length', 'max_allowed_packet', 'sort_buffer_size',
  'join_buffer_size', 'read_buffer_size', 'read_rnd_buffer_size',
  'tmp_table_size', 'max_heap_table_size', 'internal_tmp_mem_storage_engine',
  'temptable_max_ram', 'temptable_max_mmap', 'temptable_use_mmap'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
  'Threads_connected', 'Threads_running', 'Max_used_connections',
  'Created_tmp_tables', 'Created_tmp_disk_tables',
  'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_data',
  'Innodb_buffer_pool_pages_free'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
  'sort_buffer_size', 'join_buffer_size', 'read_buffer_size',
  'read_rnd_buffer_size', 'tmp_table_size', 'max_heap_table_size',
  'internal_tmp_mem_storage_engine', 'max_allowed_packet'
);
SHOW ENGINE INNODB STATUS;

测量 InnoDB 和进程内存

如果该版本提供此 Performance Schema 内存表且 InnoDB 监测已启用,可以查看当前分配。覆盖范围随版本变化;稍后启用计数器无法重建所有早期分配。缺失行或零值并不代表没有内存消耗。不要将各监测项的峰值相加当作同一时刻的峰值。将当前总和填入可选 InnoDB 测量字段,它保持独立于模型。

SELECT EVENT_NAME,
       ROUND(CURRENT_NUMBER_OF_BYTES_USED / 1048576, 2) AS current_mib,
       ROUND(HIGH_NUMBER_OF_BYTES_USED / 1048576, 2) AS high_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC;

SELECT ROUND(SUM(CURRENT_NUMBER_OF_BYTES_USED) / 1048576, 2)
       AS instrumented_innodb_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%';

Linux 下的 RSS 单位为 KiB:使用 K 后缀,或除以 1024 转为 MiB。RSS 涵盖整个进程。解释结果时,应考虑 cgroup 限制、系统页缓存、分配器保留内存和其他服务。

ps -C mariadbd,mysqld -o pid=,rss=,comm=

临时表规则及实际限制

MariaDB 和使用 MEMORY 的 MySQL 内部临时表由 tmp_table_size 与 max_heap_table_size 中较小的值限制每张表。一个查询可能同时存在多张表及多个连接缓冲区。模型按您选择的操作数量计算活动查询,而非为每个空闲连接分配全部查询缓冲区。

MySQL TempTable 的 temptable_max_ram 在会话间共享。从 8.0.28 起,tmp_table_size 也限制单张表;更早的类型只使用共享限制。本地内存块位于 RAM 限制之外,可能保留至线程退出。因此模型为每个连接预留一个块;实际块可能大于示例的 1 MiB。mmap 文件可能带来驻留页,文件容量限制并不等于 RAM 分配。

压力场景采用相同查询结构,将所有 max_connections 连接视为活动连接。它并非保证的上限。还应预留用户 MEMORY 表、网络缓冲区增长、SQL/BLOB、binlog、复制、预处理语句、线程缓存和其他分配。请用代表性负载下的进程峰值验证模型。估算或调优目标不会强制设置内存上限。

来源及验证

于 2026 年 10 月 13 日核查。原创说明参考 Releem 和服务器文档。Releem 示例列出 200 个连接和 32 MiB 限制,却乘以 16 MB。每连接一张表的正确对应结果为 6400 MiB = 6.25 GiB。应优先遵循具体引擎规则,而非通用公式。

  • Releem — memory calculator
  • Releem — MySQL memory usage
  • Releem — tmp_table_size
  • MariaDB — memory allocation
  • MySQL — memory use
  • MySQL — temporary tables
  • MySQL — InnoDB parameters
PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept