Hi, I’m Shendi
Mysql啟動占用內存過高解決
前言
最近服務器內存不夠用了,甚至還出現了內存溢出問題,導致程序宕機。但請求與用戶量并沒有多少,所以從各種啟動的程序中想方設法的盡可能的減少其占用的內存。
而在我的服務器中,Mysql服務占大頭,吃了400多MB
經過修改配置,優化,最后降到100多MB,如下
減少內存占用的幾個方法
使用本地數據庫來進行測試。目前什么都沒有配置也沒有連接,Mysql 服務占用 360MB
調整表緩存與表定義緩存數量
在mysql配置文件 my.ini 中,[mysqld]
部分,新增或修改下面兩個項
- table_open_cache(打開的表緩存數量)
- 表緩存是MySQL用來存儲已經被打開的表的一種內存數據結構,可以提高查詢性能
- table_definition_cache(打開的表定義緩存數量)
- 表定義緩存用于存儲表的定義信息,包括列的數量、類型、索引等
按照自己的需求更改,我的表不超過100個,于是我直接設置100
table_open_cache=100
table_definition_cache=100
重啟 mysql 后發現內存降至 246MB,較之前少了一百多MB
關閉 performance_schema
將上面的操作注釋,依然是360MB
同樣,在mysql的my.ini文件中的[mysqld]
部分加入下面這樣的代碼
performance_schema=off
performance_schema 是MySQL的一個特殊模式,用于監控數據庫服務器的性能和運行狀態。通過它可以查看數據庫服務器的性能指標,如查詢執行情況、連接情況、內存使用情況等。如果performance_schema=off,則不會記錄這些性能指標,也就無法通過performance_schema來查看數據庫服務器的性能狀態。
將其關閉后,重啟Mysql服務,發現內存占用一下就少了很多。從360MB變到70多MB
結合第一個方法,內存變動不大
剩下的就是調整連接數等,但對我來說,現在的內存占用已經可以了。
END