14.3.4 Configuring the Memory Allocator for InnoDB 配置内存分配器

14.3.4 Configuring the Memory Allocator for InnoDB 配置内存分配器

当InnoDB 被开发,内存分配器提供了操作系统和run-time 库往往缺乏性能和可扩展性。

当时,没有内存分配器库调整用于多核CPUs.

因此,InnoDB 实现它的自己的内存分配在内存子系统。

这个分配器是通过一个单独的互斥保护,这可能是一个瓶颈。

如今,随着多核系统越来越广泛的应用,如操作系统已经成熟,内存分期已经显著改善。

新的内存管理器工作的更好,比过去更好的扩展性。 高性能内存分配器包括 Hoard, libumem, mtmalloc, ptmalloc,

tbbmalloc, and TCMalloc.

大部分工作,尤其那些内存是频繁被分配和释放的(比如多表关联),收益于使用一个高度调整的内存分配器

相对于内部。

你可以控制是否InnoDB 使用它自己的内存分配器或者操作系统的分配器,

通过设置系统配置参数
mysql> show variables like ‘%innodb_use_sys_malloc%’;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| innodb_use_sys_malloc | ON |
+———————–+——-+
1 row in set (0.00 sec)

如果设置为ON或者1(默认的),InnoDB 使用malloc 和free 函数依赖操作系统相比

本身管理内存pools.这个参数不是动态的,只有在系统启动时生效。

继续使用InnoDB 内存分配器,设置innodb_use_sys_malloc to 0.

当InnoDB 内存分配器被禁用, InnoDB 忽略 innodb_additional_mem_pool_size的值。

InnoDB 内存分配器使用额外的内存pool 用于满足分区请求不必到system memory allocator。

当 InnoDB memory allocator 是被关闭,所有这些分配请求通过系统内存分配器实现

原文地址:https://www.cnblogs.com/hzcya1995/p/13351183.html