本篇文章給大家?guī)砹岁P于mysql的相關知識,其中主要整理了占用內(nèi)存過大解決方法的相關問題,分別使用windows和CentOS7兩種系統(tǒng)來解決該問題,下面一起來看一下,希望對大家有幫助。

推薦學習:mysql視頻教程
前言
對于部分小資玩家來說,服務器數(shù)量和內(nèi)存往往是很有限的,像我個人的服務器配置就是2核4G5M。
4G內(nèi)存對于Java玩家來說,真的不大,開幾個中間件+自己的微服務真的還蠻擠的,然后又攤上MySQL這個大冤種。我本機上的MySQL僅僅只占幾M內(nèi)存(雖然我不怎么用,但是本機MySQL確實是開著的):

而服務器的則要占400M,怎么說其實沒什么吞吐量,純粹是自己玩一玩,這內(nèi)存占用屬實有點吃不消啊。。。

解決方案
了解到可以通過修改配置來減小MySQL的內(nèi)存占用,便嘗試了一下,并進行了記錄。由于我同時有兩臺服務器,一臺裝的是windows service 2016,還有一臺裝的是CentOS7,兩臺情況都是差不多的,故同時做兩份記錄,供大家參考。
找到配置文件
Windows Service 2016
配置文件的默認位置是C:ProgramDataMySQLMySQL Server 8.0my.ini,如果有修改,則根據(jù)自己的實際情況找到。

CentOS7
配置文件的默認路徑在/etc/my.cnf,如果有修改,則根據(jù)自己的實際情況找到。
修改配置文件
Windows上可以用Ctrl + F 進行搜索,Linux上可以用 ‘/key’ 進行搜索,不會的話可以參考一下百度。
我們需要找到并修改的東西一共有三個:
-
找到
table_definition_cache,我們修改為400官方解釋為:可以存儲在定義緩存中的表定義數(shù)(來自.frm文件)。如果使用大量表,可以創(chuàng)建大型表定義緩存以加快表的打開速度。與普通的表緩存不同,表定義緩存占用更少的空間,并且不使用文件描述符。最小值和默認值均為400。
-
找到
table_open_cache,我們修改為256MySQL每打開一個表,都會讀入一些數(shù)據(jù)到table_open_cache緩存中,當MySQL在這個緩存中找不到相應信息時,才會去磁盤上讀取。
官方解釋為:所有線程的打開表數(shù)。增加該值會增加mysqld所需的文件描述符的數(shù)量。因此,您必須確保在[mysqld safe]部分的變量“open files limit”中將允許打開的文件量設置為至少4096。
-
找到
performance_schema,修改為off如果找不到這個的話,直接在合適的地方加上
performance_schema = off即可。用于監(jiān)控MySQL server在一個較低級別的運行過程中的資源消耗、資源等待等情況,關閉之后可以節(jié)省開銷,不會使server的行為發(fā)生變化。
修改完之后保存退出。
重啟MySQL
Windows Service 2016
以管理員身份啟動控制臺,輸入 net stop mysql,然后再輸入 net start mysql。
重啟之后還占62M。

CentOS7
控制臺輸入 service mysqld restart 即可重啟。

如果不行的話,可以試試 /etc/init.d/mysqld restart 這個指令。
重啟之后占用92M,比Windows那臺多點。

后記
通過這種方法確實可以降低mysql的內(nèi)存占用,但我這只是通過降低性能來換取內(nèi)存罷了,如果對吞吐量要求比較高的情況,那肯定是不能這樣直接修改的,得根據(jù)實際請求進行調整才行。
推薦學習:mysql視頻教程
站長資訊網(wǎng)