MySQL幾乎消耗了記憶體中的所有記憶體?
我正在執行具有 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也不會清除記憶體。A
flush 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