免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8924 | 回复: 18
打印 上一主题 下一主题

突破32位Linux下Innodb缓冲池(innodb_buffer_pool_size) 2G限制 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-11 13:00 |只看该作者 |倒序浏览
我的原文在这里http://www.sanotes.net/html/y2008/325.html
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


希望对大家有帮助

论坛徽章:
0
2 [报告]
发表于 2008-07-11 13:23 |只看该作者
研究的不错!
小样,继续努力!

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
3 [报告]
发表于 2008-07-11 14:55 |只看该作者
这个头像是啥官哇。。。芝麻官。。。


不过这个官能办实事

论坛徽章:
0
4 [报告]
发表于 2008-07-11 15:22 |只看该作者
能看看  cat /proc/sys/vm/overcommit_memory  的输出是多少吗?  
这个参数对malloc的返回有影响。  malloc在linux下会乐观分配内存。

好像大多数发行版把/proc/sys/vm/overcommit_memory设成1.   这样他的malloc就不是3g了。
分配内存超过swap+vm.overcommit_ratio*RAM时,都会分配失败。不会引起oom_killer

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-07-11 16:14 |只看该作者
原帖由 7islands 于 2008-7-11 15:22 发表
能看看  cat /proc/sys/vm/overcommit_memory  的输出是多少吗?  
这个参数对malloc的返回有影响。  malloc在linux下会乐观分配内存。

好像大多数发行版把/proc/sys/vm/overcommit_memory设成1.   这样他的 ...

我试验的结果是在32位机器上/proc/sys/vm/overcommit_memory设置成0(默认)或者1,都只能分配最大3G内存。你可以验证一下。

[ 本帖最后由 FinalBSD 于 2008-7-11 16:18 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2008-07-11 16:34 |只看该作者
乐观分配内存我想主要是实现COW功能,但是不是无限制的分配下去,3GB应该是顶峰,因为内存寻址的问题,要解决这个问题,可以打相应的内核补丁把4GB都给用户空间。

论坛徽章:
0
7 [报告]
发表于 2008-07-11 19:29 |只看该作者

回复 #5 FinalBSD 的帖子

不好意思,我记错了。是以前做的试验。  

好像大多数发行版把/proc/sys/vm/overcommit_memory设成2     可以man proc  (好记性不如烂笔头啊! 教训

麻烦你在试试! 我在我机器上测试的时候是成功的。  

等你的回复!

论坛徽章:
0
8 [报告]
发表于 2008-07-13 19:40 |只看该作者
UP!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
9 [报告]
发表于 2008-07-14 12:14 |只看该作者
我想问下,这个问题怎么解决呢?
如果我开了AWE,32位的机器内存可以支持到最大36G了
这时候我怎么设才能用到3G以上的内存呢?就不可以了?

论坛徽章:
0
10 [报告]
发表于 2008-07-14 13:02 |只看该作者
如果是我,直接升级到64位,省心
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP