14

民間,在Amazon RDS/Mysql中解釋這種內存消耗模式?

有人可以解釋這種內存消耗模式在運行Mysql的Amazon RDS上嗎?在這張圖表中,我在03:30升級到了db.m2.2xlarge,內存爲34GB。您可以非常清楚地看到切換。當客戶端開始連接並點擊該實例時,Freeable內存急劇下降到5GB,現在它在懸停。在我之前的數據庫實例大小之間的升級中,我看到了相同的模式,直到可釋放內存降到1GB以下並無限期地停留在那裏。

這個實例在03:30和07:30之間做什麼?爲什麼不釋放未使用的內存,因爲它變得可用?我想我會希望這個圖形是一個波形,對應於使用和流量模式,vs和指數衰減形狀,這表明它是一個超級懶惰和/或破碎的垃圾收集算法。

另請注意,大約2/3的數據庫操作是寫操作,而1/3是讀操作,並且DB前面有大約2GB的memcache。

memory consumption amazon rds mysql

回答

13

MySQL的維護最近使用過的表,查詢和存儲結果的緩存,以更快返回結果。例如,如果您從客戶端100萬次查詢「select * from company where id = 1」,則只有第一個查詢需要轉到磁盤,下一個999,999將直接來自RAM緩存中。沒有理由讓MySQL直到它知道需要更多內存時才使該緩存過期,因此它會保存內容直到需要釋放內存以用於其他工作或更頻繁使用的結果。

我不認爲是專家 - 我理解DB查詢緩存優化是一個非常複雜和深入的科學。甲骨文,微軟等公司的程序員花了多年的時間研究出緩存空間管理的最佳方式,因此很難從外部預測。