zoukankan      html  css  js  c++  java
  • 【笔记】InnoDB内存分配

    原文: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.

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

  • 相关阅读:
    用“Keras”11行代码构建CNN
    技术 | 使用深度学习检测DGA(域名生成算法)
    未来的超级智能网络攻击需要AI竞技俱乐部来拯救
    开源中国的代码托管
    Hello Java !
    15-include的使用
    14-递归函数
    13-函数的调用
    12-函数的返回值
    11-函数的参数
  • 原文地址:https://www.cnblogs.com/xiwang6428/p/3854509.html
Copyright © 2011-2022 走看看