ITPub博客

首页 > 数据库 > > 14.6.4 为InnoDB 配置内存分配

14.6.4 为InnoDB 配置内存分配

作者:飘絮絮絮丶 时间:2020-05-12 10:02:41 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma


当InnoDB被研发时,操作系统和运行时库提供的内存分配器往往缺乏性能和可扩展性。 那时,没有为多核CPU调优的内存分配库。 因此,InnoDB在mem子系统中实现了自己的内存分配器。 这个分配器由一个mutex保护,这可能会成为一个瓶颈。 InnoDB还在系统分配器(malloc和free)周围实现了一个包装接口,这个接口同样由一个mutex保护。



现在,随着多核系统变得越来越广泛,随着操作系统的成熟,在配备操作系统的内存分配器方面已经取得了显着的进步。 这些新的内存分配器执行得更好,比以往更具可扩展性。 大多数工作负载,尤其是那些内存频繁分配和释放的工作负载(如多表连接),可以使用高度调优的内存分配器而不是内部的InnoDB特定的内存分配器。



您可以通过在MySQL选项文件(my.cnf或my.ini)中设置系统配置参数innodb_use_sys_malloc的值来控制InnoDB是使用其自己的内存分配器还是操作系统的分配器。 如果设置为ON或1(默认值),InnoDB使用底层系统的malloc和free函数,而不是自己管理内存池。 该参数不是动态的,只有在系统启动时才生效。 要继续使用InnoDB内存分配器,请将innodb_use_sys_malloc设置为0。



当InnoDB内存分配器被禁用时,InnoDB会忽略参数innodb_additional_mem_pool_size的值。 InnoDB内存分配器使用额外的内存池来满足分配请求,而不必回退到系统内存分配器。 当InnoDB内存分配器被禁用时,所有这些分配请求都由系统内存分配器完成。



在使用动态链接的类Unix系统上,替换内存分配器可能就像将环境变量LD_PRELOAD或LD_LIBRARY_PATH指向实现分配器的动态库一样简单。 在其他系统上,可能需要重新链接。 请参阅您选择的内存分配程序库的文档。



由于InnoDB在使用系统内存分配程序时无法跟踪所有内存使用情况(innodb_use_sys_malloc为ON),因此SHOW ENGINE INNODB STATUS命令输出中的“BUFFER POOL AND MEMORY”部分仅包含“分配的内存总量”中的缓冲池统计信息”。 任何使用mem子系统或使用ut_malloc分配的内存都将被排除。




注意:

innodb_use_sys_malloc和innodb_additional_mem_pool_size在MySQL 5.6中被弃用,并在MySQL 5.7中被删除。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3129534/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42164