原文:http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/

有很多问题是有关InnoDB如何分配内存的。这里我试图解释下启动时内存的分配情况。先列出重要的常量:

NBLOCKS=innoDB缓冲池的块数量= innodb_buffer_pool_size / 16384

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

else if (innodb_buffer_pool_size >= 8Mb) = 10000

else = 1000 (对于Linux这类系统是正确的,对于Windows则有另一个计算方式)

所以InnoDB使用的内存量:

l  innodb缓冲池内存

l  innodb额外内存池大小

l  innodb记录缓冲大小

l  自适应哈希索引, 大小= innodb缓冲池 / 64

l  系统目录哈希, 大小 = 6 * innodb缓冲池 / 512

l  同步数组(sync_array)使用的内存,为同步单元利用,大小 = OS_THREADS * 152

l  系统事件(os_events)的内存, 也为同步单元利用,大小= OS_THREADS * 216

l  系统锁定的内存, 大小=5 * 4 * NBLOCKS

所以,最后的innodb的公式:

缓冲池大小+缓冲记录大小+额外内存池大小+ 812 / 16384 * 缓冲池大小 + OS_THREADS * 368
为简单起见:812 / 16384 * 缓冲池大小 ~~ 缓冲池大小/ 20

和 OS_THREADS*368 = 17.5MB 如果缓冲池大小> 1000MB

= 3.5MB 如果 缓冲池大小> 8MB

举个例子,比如你的缓冲池大小=1500M,额外内存池大小=20M,记录缓冲大小=8M,那么InnoDB分配的内存= 1500M + 20M + 8M + 1500/20M + 17.5M = 1620.5M.

在你计划利用你的服务器内存时,你要考虑到额外内存的利用。

【笔记】InnoDB内存分配的更多相关文章

  1. 深入理解Java虚拟机之读书笔记三 内存分配策略

    一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配.对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分 ...

  2. 《深入理解Java虚拟机》学习笔记之内存分配

    JVM在执行Java程序的过程中会把它所管理的内存划分若干个不同的数据区域,如下图: 大致可以分为两类:线程私有区域和线程共享区域. 线程私有区域 程序计数器(Program Counter Regi ...

  3. C语言学习笔记--动态内存分配

    1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...

  4. C++ Primer 笔记——控制内存分配

    1.当我们使用一条new表达式时,实际执行了三步操作. new表达式调用一个名为operator new ( 或者operator new[] ) 的标准库函数.该函数分配一块足够大的,原始的,未命名 ...

  5. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器

    14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...

  6. JVM探秘:内存分配与回收策略

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 内存分配一般关注的是对象在堆上分配的情况,对象主要分配在新生代的Eden区中,如果启用 ...

  7. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  8. delphi 精要-读书笔记(内存分配释放)

    delphi 精要-读书笔记(内存分配释放)     1.内存分为三个区域:全局变量区,栈区,堆区 全局变量区:专门存放全局变量 栈区:分配在栈上的变量可被栈管理器自动释放 堆区:堆上的变量内存必须人 ...

  9. 《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略

    前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,或者是对其中不明白的地方做一些注释.主要是方便之后进行 ...

随机推荐

  1. eclipse导入cordova创建的项目

    eclipse导入cordova创建的项目 看图不说话 run这个MainActivity就可以了,bin目录下会生成APK

  2. Python数据类型之“序列概述与基本序列类型(Basic Sequences)”

    序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list. ...

  3. winform 程序制作自己的数字签名(续)

    在上一篇文章<winform 程序制作自己的数字签名>中我们已经可以得到我们程序定制的数字签名了,但是比较讨厌的是每次编译之后,数字签名需要重新手动添加. 我们需要的是在程序编译时自动添加 ...

  4. 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】

    最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...

  5. nodejs图片转换字节保存

    fs.readFile('上传图片路径', function(err, data) { if (err) { // 错误处理 return; } var base64str = new Buffer( ...

  6. tomcat对请求路径的匹配过程(原创)

    1.匹配服务 如果有两个应用,一个应用只能通过80端口访问,另一个应用只能通过8080端口访问,这种情况下,可以分开两个服务,然后分别创建80端口和8080端口的连接器. 2.匹配主机 一个服务下配置 ...

  7. Spring Annotation Processing: How It Works--转

    找的好辛苦呀 原文地址:https://dzone.com/articles/spring-annotation-processing-how-it-works If you see an annot ...

  8. Foundation 6 – 先进的响应式的前端开发框架

    Foundation 6 让您的项目从原型到成平比以往任何时候都更有效!它包括了广泛的模块和灵活的组件.这些多功能就像轻便的积木,可以很容易地把你的想法实现.所有的代码片段支持ARIA属性和作用以及如 ...

  9. nodejs 生产环境配置

    1.node 默认为development(开发)模式 启动node 时可以设置模式为生产模式 set NODE_ENV=production node app.js 2.设置node监听的端口 va ...

  10. 【LeetCode】Self Crossing(335)

    1. Description You are given an array x of n positive numbers. You start at point (0,0) and moves x[ ...