這篇文章為大家帶來了關於mysql的相關知識,其中主要整理了佔用內存過大解決方法的相關問題,分別使用windows和CentOS7兩種系統來解決該問題,下面一起來看一下,希望對大家有幫助。
推薦學習:mysql影片教學
#前言
對於部分小資玩家來說,伺服器數量和記憶體往往是很有限的,像我個人的伺服器配置就是2核心4G5M。
4G內存對於Java玩家來說,真的不大,開幾個中間件 自己的微服務真的還蠻擠的,然後又攤上MySQL這個大冤種。我本機上的MySQL只佔幾M記憶體(雖然我不怎麼用,但本機MySQL確實是開啟的):
##而伺服器的則要佔400M,怎麼說其實沒什麼吞吐量,純粹是自己玩一玩,這內存佔用屬實有點吃不消啊。 。 。
解決方案
了解到可以透過修改配置來減少MySQL的記憶體佔用,便嘗試了一下,並進行了記錄。由於我同時有兩台伺服器,一台裝的是windows service 2016,還有一台裝的是CentOS7,兩臺情況都是差不多的,故同時做兩份記錄,供大家參考。
找到設定檔
Windows Service 2016
設定檔的預設位置是
C:\ProgramData\ MySQL\MySQL Server 8.0\my.ini,如果有修改,則根據自己的實際情況找到。
CentOS7
設定檔的預設路徑在
/etc/my.cnf,如果有修改,則根據自己的實際情況找到。
修改設定檔
Windows上可以用Ctrl F 進行搜索,Linux上可以用 ‘/key’ 進行搜索,不會的話可以參考一下百度。
我們需要找到並修改的東西一共有三個:
- 找到
table_definition_cache,我們修改為400
官方解釋為:可以儲存在定義快取中的表定義數(來自.frm檔案)。如果使用大量表,可以建立大型表定義快取以加快表的開啟速度。與普通的表格快取不同,表定義快取佔用較少的空間,且不使用檔案描述符。最小值和預設值均為400。
- 找到
table_open_cache,我們修改為256
MySQL每打開一個表,都會讀入一些資料到table_open_cache快取中,當MySQL在這個快取中找不到對應資訊時,才會去磁碟上讀取。 官方解釋為:所有執行緒的開啟表數。增加該值會增加mysqld所需的檔案描述符的數量。因此,您必須確保在[mysqld safe]部分的變數「open files limit」中將允許開啟的檔案量設定為至少4096。
- 找到
performance_schema ,修改為off
如果找不到這個的話,直接在適當的地方加上performance_schema = off 即可。
用於監控MySQL server在一個較低層級的運作過程中的資源消耗、資源等待等情況,關閉之後可以節省開銷,不會使server的行為改變。
修改完後儲存退出。
重啟MySQL
Windows Service 2016
以管理員身分啟動控制台,輸入net stop mysql,然後再輸入net start mysql。
重啟之後還佔62M。
CentOS7
#控制台輸入 service mysqld restart 即可重新啟動。
如果不行的話,可以試試
/etc/init.d/mysqld restart 這個指令。
重啟之後佔用92M,比Windows那台多點。
後記
透過這個方法確實可以降低mysql的記憶體佔用,但我這只是透過降低效能來換取記憶體罷了,如果對吞吐量要求比較高的情況,那肯定是不能這樣直接修改的,得根據實際請求進行調整才行。
推薦學習:mysql影片教學
以上是實例詳解MySQL佔用記憶體過大解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!