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 是被关闭,所有这些分配请求通过系统内存分配器实现