首頁  >  文章  >  資料庫  >  實例詳解MySQL佔用記憶體過大解決方法

實例詳解MySQL佔用記憶體過大解決方法

WBOY
WBOY轉載
2022-07-06 14:03:122929瀏覽

這篇文章為大家帶來了關於mysql的相關知識,其中主要整理了佔用內存過大解決方法的相關問題,分別使用windows和CentOS7兩種系統來解決該問題,下面一起來看一下,希望對大家有幫助。

實例詳解MySQL佔用記憶體過大解決方法

推薦學習:mysql影片教學

#前言

對於部分小資玩家來說,伺服器數量和記憶體往往是很有限的,像我個人的伺服器配置就是2核心4G5M。

4G內存對於Java玩家來說,真的不大,開幾個中間件 自己的微服務真的還蠻擠的,然後又攤上MySQL這個大冤種。我本機上的MySQL只佔幾M記憶體(雖然我不怎麼用,但本機MySQL確實是開啟的):

實例詳解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’ 進行搜索,不會的話可以參考一下百度。

我們需要找到並修改的東西一共有三個:

  1. 找到

    table_definition_cache,我們修改為400

    官方解釋為:可以儲存在定義快取中的表定義數(來自.frm檔案)。如果使用大量表,可以建立大型表定義快取以加快表的開啟速度。與普通的表格快取不同,表定義快取佔用較少的空間,且不使用檔案描述符。最小值和預設值均為400。

  2. 找到

    table_open_cache,我們修改為256

    MySQL每打開一個表,都會讀入一些資料到table_open_cache快取中,當MySQL在這個快取中找不到對應資訊時,才會去磁碟上讀取。

    官方解釋為:所有執行緒的開啟表數。增加該值會增加mysqld所需的檔案描述符的數量。因此,您必須確保在[mysqld safe]部分的變數「open files limit」中將允許開啟的檔案量設定為至少4096。

  3. 找到

    performance_schema ,修改為off

    如果找不到這個的話,直接在適當的地方加上

    performance_schema = off 即可。

    用於監控MySQL server在一個較低層級的運作過程中的資源消耗、資源等待等情況,關閉之後可以節省開銷,不會使server的行為改變。

修改完後儲存退出。

重啟MySQL

Windows Service 2016

以管理員身分啟動控制台,輸入net stop mysql,然後再輸入net start mysql。

重啟之後還佔62M。

實例詳解MySQL佔用記憶體過大解決方法

CentOS7

#控制台輸入 service mysqld restart 即可重新啟動。

實例詳解MySQL佔用記憶體過大解決方法

如果不行的話,可以試試

/etc/init.d/mysqld restart 這個指令。

重啟之後佔用92M,比Windows那台多點。

實例詳解MySQL佔用記憶體過大解決方法

後記

透過這個方法確實可以降低mysql的記憶體佔用,但我這只是透過降低效能來換取記憶體罷了,如果對吞吐量要求比較高的情況,那肯定是不能這樣直接修改的,得根據實際請求進行調整才行。

推薦學習:mysql影片教學

以上是實例詳解MySQL佔用記憶體過大解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除