MySQL Innodb里面的innodb_buffer_pool_size 参数
这个参数设置buffer_pool_size也就是缓冲池大小,官方的建议是不要超过2G。经过研究发现这个限制主要来自于如下原因:
32位的Linux内核,内存的寻址范围最大只能是4GB(2^32),这4GB当中0-3GB的给用户进 程(User Space)使用,3-4GB给内核使用.也就是说像MySQL这样的进程分配的内存不能超过3GB,但是为什么 innodb_buffer_pool_size 设置成3GB不行呢?很简单,因为MySQL在分配这个内存的时候不仅仅是innodb_buffer_pool_size的设置值,还加了一个 struct:(innobase/ut/ut0mem.c)
81 ret = malloc(n + sizeof(ut_mem_block_t));
这样的话,设置成3GB后,malloc的结果会超过3GB,看到这种错误:
InnoDB: Error: cannot allocate 3221241856 bytes of
数据库还是推荐直接上64位的系统