MySQL 操作系统内存分配机制结合 jemalloc
在MySQL运行环境中,碰到内存使用完之后不释放情况,概率还是比较高的。那有必要了解下,为什么会出现这样的情况。
在翻看很多材料和了解下源码实现。在早期开发InnoDB时,操作系统运行时提供的内存分配器,通常缺乏性能和可伸缩性。当时,还没有针对多核cpu进行优化的内存分配器库。因此,InnoDB在内存子系统中实现了自己的内存分配器。这个分配器由单个互斥锁保护,同时InnoDB还在系统分配器(malloc和free)周围实现了一个包装器接口,同样由单个互斥锁保护。随着多核系统的广泛应用,以及操作系统的成熟,操作系统提供的内存分配器也有了显著的改进。与过去相比,这些新的内存分配器性能更好,可扩展性更强。大多数工作负载,特别是那些经常分配和释放内存的工作负载,都可以从使用高度调优的内存分配器中获益,而不是使用内部的innodb的内存分配器,这可能成为瓶颈。