各位
有人能解释一下运行Mysql的Amazon RDS上的这种内存消耗模式吗?在此图中,我在03:30升级到db.m2.2xlarge,具有34 GB的可用内存。你可以很清楚地看到这种转换。当客户端开始连接并访问该示例时,可释放内存急剧下降到5GB,现在它徘徊在5GB左右。在我之前的DB示例大小升级中,我看到了相同的模式,直到可释放内存下降到略低于1GB并无限期地徘徊在那里。
在03:30到07:30之间这个示例在做什么?为什么它不释放未使用的内存,因为它变得可用?我想我会期望这个图是一个波浪形,对应于使用和流量模式,vs和指数衰减形状,这表明它是一个超级懒惰和/或破碎的垃圾收集算法。
还要注意,大约2/3的数据库操作是写操作,1/3是读操作,并且在数据库前面有大约2GB的memcache。
x1c 0d1x的数据
2条答案
按热度按时间niwlg2el1#
MySQL在内存中维护最近使用的表,查询和结果的缓存,以便更快地返回结果。例如,如果您从客户端查询“select * from company where id = 1”100万次,则仅第一个查询需要转到磁盘,下一个999,999将直接来自RAM缓存。MySQL在知道需要更多内存之前没有理由让这个缓存过期,所以它会保存东西,直到需要释放RAM用于其他工作或更频繁使用的结果。
我并不自称是一个Maven--我知道DB查询缓存优化是一门非常复杂和深入的科学。Oracle、微软和其他公司的程序员们已经花了很多年的时间来研究该高速缓存空间的最佳方法,所以很难从外部预测。
vfhzx4xs2#
Mysql会消耗掉所有的内存,但它会为操作系统保留一块,否则它会崩溃。释放内存是一个昂贵的操作,所以它不会这样做,直到它绝对必要。我的猜测是,在3:30到8:30之间,没有任何需要释放内存的东西,因此系统继续使用内存中的任何东西正常运行。最终,该图应该变得更像锯齿模式,因为Mysql会定期收回内存。