Mysql

MySQL幾乎消耗了記憶體中的所有記憶體?

  • January 4, 2012

我正在執行具有 24G RAM 的伺服器。這裡唯一執行的是配置為 Master 的 MySQL 伺服器。

當我通過 free -m 檢查記憶體時,我得到了這個:

            total       used       free     shared    buffers     cached
Mem:         24158      24027        131          0        131      23050

大約。23G 在記憶體中。這對我來說似乎很多。

我還在 my.cnf 中將記憶體設置為 0

query_cache_size        = 0

如何檢查究竟記憶體了什麼?重啟mysql也不會清除記憶體。Aflush tables也沒有幫助。

您正在查看兩個不同的記憶體。free -m告訴您作業系統為磁碟記憶體使用了多少記憶體,而不是 MySQL 為數據庫記憶體使用了多少。並且作業系統應該為磁碟記憶體使用盡可能多的記憶體——為什麼不想要​​盡可能大的記憶體呢?如果應用程序需要,該記憶體始終可供使用。有關用於記憶體的 Linux 記憶體使用的精彩討論,請參見此處

這意味著核心使用幾乎所有記憶體來記憶體數據。你可能有幾乎空閒的系統,所以沒關係,但要優化它,你應該看看 mysql 配置……

如果您認為您可以從查詢記憶體中受益,請啟用它並給它例如 128 MB。然後你可以在mysql中查看它是如何使用的。如果您主要執行 SELECT 查詢而不執行很多 INSERT/UPDATE,則查詢記憶體可能對您有好處。它很少會導致問題,因此您可以安全地啟用它。

那麼如果你使用的是 MyISAM 儲存引擎,那麼應該通過 kay_buffer 變數啟用一些記憶體。如果使用 InnoDB,一般建議是將 50-80% 的可用記憶體分配給 innodb_buffer_pool_size(如果這是專用的 mysql 伺服器)。Mysql 和 InnoDB 比 linux 核心更清楚要記憶體的內容。

對於釋放 mysql(讀取)記憶體,我認為只有 mysql restart 有幫助。要釋放系統記憶體,請使用命令:

echo 3 > /proc/sys/vm/drop_caches

http://linux-mm.org/Drop_Caches

引用自:https://serverfault.com/questions/345097