IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Innodb如何使用内存

MySQL支持 2009-12-13 18:04:43 累计浏览 5,166 次
本机暂存

    来源:http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/

    译这个文章的目的:

      最近经常被问起Innodb是如何使用内存的。该问题早已被原MySQL公司的Vadim论证过。我这里译一下他的文章供大家参考。

    开始:

      这里有许多关于Innodb如何使用内存的问题。我这里将会以innodb启动时的分配情况做一个解释。一些重要的概念:

      NBLOCKS=Innodb_buffer_pool有多个页(block)=innodb_buffer_pool_size/16384(16k)

      OS_THREADS= if ( innodb_buffer_pool_size >= 1000Mb) = 50000

       else if (innodb_buffer_pool_size >= 8Mb) = 10000

       else = 1000 (该值只用在*nixes系统上,对于Windows有一点小的区别计算OS_THREADS)

    所以Innodb 使用的内存包括:

     innodb_buffer_pool_size

     innodb_additional_mem_pool_size

     innodb_log_buffer_size

     adaptive index hash ,size (innodb buffer 索引管理区)= innodb_buffer_pool_size/64

     system dictionary hash,size(innodb内部字典区) = 6 * innodb_buffer_pool_size/512

     memory for sync_array,size(用于Innodb内部syncronzation的开销)=OS_THREAD * 512

     memory for os_event,size(用于innodb内存的syncronzation的开销)=OS_THREAD * 216

     memory for locking system(内存的锁管理系统),size = 5 * 4 *NBBLOCKS

     最终得到innodb内存使用的计算公式为:

     Innodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + 812/16384 * innodb_buffer_pool_size + OS_THREADS * 368

     对于812/16384 * Innodb_buffer_pool_size 可以简单的用 innodb_buffer_pool_size / 20 计算,

    对于OS_THREADS * 368  

     OS_THREADS * 368 = 17.5 MB if innodb_buffer_pool_size > 1000MB

     OS_THREADS * 368 = 3.5 MB if innodb_buffer_pool_size > 8MB

    举一个例子:

       如果你的innodb_buffer_pool_size有1500MB,innodb_additional_mem_pool_size =20 MB,innodb_log_buffer_size = 8M,

       Innodb 将会向系统申请内存为= 1500M + 20M + 8M + 1500/20 M +17.5 = 1620.5M

      根据以上的条件可以算出Innodb最根本最需要多少内存,这样对于服务器的内存使用也可以有一个规划了。

同分类推荐文章

  1. 第七章 事务 (2026-04-07 08:00:00)
  2. 第六章:分区 (2026-03-29 08:00:00)
  3. Neko Master: 从 0 到 1K+ Star 的 Vibe Coding 实践 (2026-03-01 08:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,172)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,330)
  3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,091)
  4. Java开发岗位面试题归类汇总 (累计阅读 21,979)
  5. Mysql监控指南 (累计阅读 21,227)
  6. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,203)
  7. Linux内存点滴 用户进程内存空间 (累计阅读 13,059)
  8. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 12,990)
  9. 15个最好的免费开源电子商务平台 (累计阅读 12,464)
  10. Linux Used内存到底哪里去了? (累计阅读 11,750)