InnoDB的内存使用情况

参考文献: http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/

关于InnoDB如何分配内存的问题有很多。在此,我会给出一些关于数据库启动时内存分配的解释。

下面是一些重要的常量:
1.  NBLOCKS:等于innodb_buffer_pool中的块总数,也就是innodb_buffer_pool_size / 16384
2.  OS_THREADS:如果innodb_buffer_pool_size >= 1000MB,那么等于50000;如果innodb_buffer_pool_size >= 8MB,那么等于10000;否则,等于1000(这种计算方法适用于Linux/Unix系统,Windows有另外一种计算OS_THREADS的方法)。

因此,InnoDB会使用:
1. innodb_buffer_pool
2. innodb_additional_mem_pool_size
3. innodb_log_buffer_size
4. 自适应的索引哈希,大小为innodb_buffer_pool / 64
5. 系统字典哈希,大小为6 * innodb_buffer_pool_size / 512
6. sync_array使用的内存,可用于同步原语,大小为OS_THREADS * 152
7. os_events使用的内存,同样可用于同步原语,大小为OS_THREADS * 216
8. 锁定系统使用的内存,大小为5 * 4 * NBLOCKS

因此,计算InnoDB使用内存的最终公式如下:
innodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + 812 / 16384 * innodb_buffer_pool_size + OS_THREADS * 368

为了简化上述公式,我们可以使用:
812 / 16384 * innodb_buffer_pool_size ~~ innodb_buffer_pool_size / 20
并且,如果innodb_buffer_pool > 1000MB,则OS_THREADS * 368 = 17.5MB;如果innodb_buffer_pool > 8MB,则OS_THREADS * 368 = 3.5MB。

例如,如果你设置的innodb_buffer_pool_size=1500M,innodb_additional_mem_pool_size = 20M,innodb_log_buffer_size = 8M,那么InnoDB将会分配的内存大小为1500M + 20M + 8M + 1500/20M + 17.5M,也就是1620.5M。

当你规划服务器的内存使用时,请慎重考虑额外使用的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值