2017-07-18 102 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緩衝池永遠不會被設計釋放。釋放這個內存是沒有意義的,因爲內存中的數據(避免磁盤訪問)是一個主要的優化。如果總數據+索引超過緩衝池的大小,則最近最少使用的算法將逐出舊頁面,以便騰出空間,如果查詢調用不在池中的數據(不改變總內存使用量)。 –