MySQL系列:innodb引擎分析之内存管理(二)

2014-11-23 23:12:43 · 作者: · 浏览: 32
rea_free 将一块内存归还给buddy allocator
mem_pool_get_reserved 获得buddy allocator已经使用的内存大小

3内存分配堆(memory heap)

innodb中的内存管理最终的体现形式是mem_heap_t内存分配与管理,所有关于内存分配的操作都会调用mem_heap的API方法,mem_heap_t的结构定义如下:
struct mem_block_info_struct
{
     ulint	 magic_n;         /*魔法字*/
     char	 file_name[8];    /*分配内存的文件*/
     ulint	 line;            /*分配内存的文件所在行*/
     ulint	 len;             /*block的长度*/
     ulint	 type;            /*依赖的底层分配类型,有DYNAMIC、BUFFER、BTR_SEARCH三种类型*/
     ibool	 init_block;	 /*是否是外部分配的内存块*/

     ulint	 free;           /*被占用的空间大小*/
     ulint	 start;	         /*可分配内存的起始位置*/
     byte*	 free_block;     /*备用block,仅仅在BTR_SEARCH方式可用*/

     UT_LIST_BASE_NODE_T(mem_block_t)	base;
     UT_LIST_NODE_T(mem_block_t)	 list;
};
备注:mem_block_info_struct/mem_block_info_t/mem_block_t/mem_heap_t是等价
mem_heap_t的内存结构如下:
系统的malloc和free来作为内存管理。MySQL默认的是系统管理内存方式,一些有经验的DBA会使用系统的管理内存方式+TMalloc来做内存优化,借助TMalloc高效的内存管理方式实现MySQL的性能提升。