2017-07-18 103 views
1

我有一个在Amazons RDS平台上运行的数据库,它似乎没有使用可用的全部内存量。AWS RDS内存问题

实例类型是db.m4.xlarge,这应该给我16 GiB的内存,但是当我查看监视页时,它显示我达到了当前值为2460 MB的阈值。

Screenshot of AWS RDS monitoring page

当我看DB-参数组充分显示了innodb_buffer_pool_size应该是DBinstanceClassMemory的3/4然而,当我检查实际值集(通过登录到数据库,并运行show global variables )是否设置为12465471488(我认为这是字节?)

有谁知道这是为什么,我应该设置什么选项使RDS实例充分利用可用的内存?

+0

我现在找不到对它的引用,我没有回答你的具体问题,但是我确实想要注意你的数据库操作没有获得该实例的全部内存量type指定。如果实例类型指定了16GB的内存,那么这些演出中的几个会转到底层的EC2实例。我不认为它会将16GB降低到2.5GB,所以可能有其他原因,但我认为我会分享这一点。 – Brooks

+0

@Brooks不,不是几个演出。可能更接近256 - 512 MiB的范围。实例除了运行数据库之外没有其他任何操作。 –

+0

我纠正了 - 如果我能找到文档,会有帮助...!感谢您的更正! – Brooks

回答

3

显示在控制台中的数字是免费内存 - 未使用的内存。这可以说是违反直觉的,但这就是所显示的。请注意,与该号码相邻的小条形图大部分已满,并非大部分为空。

+1

监控组必须从结算小组 –

+0

的账本中抽出一部分,对,您是正确的。感谢您的帮助。我可以确认这一点的一种方法是重新启动实例,然后可以使用完整的内存,但它会降低到之前的值。这是否基本上意味着实例应该更大,或者我需要删除一些索引(如果可能)以释放内存? – SamBremner

+0

只要系统随着时间的推移稳定运行,2.5G的空闲内存应该足够了。 InnoDB缓冲池使用MySQL使用的大部分内存(正确配置),一旦声称通过从磁盘加载数据声明,InnoDB缓冲池永远不会被设计释放。释放这个内存是没有意义的,因为内存中的数据(避免磁盘访问)是一个主要的优化。如果总数据+索引超过缓冲池的大小,则最近最少使用的算法将逐出旧页面,以便腾出空间,如果查询调用不在池中的数据(不改变总内存使用量)。 –