MySQL占用內(nèi)存過大解決方案圖文詳解
前言
對于部分小資玩家來說,服務(wù)器數(shù)量和內(nèi)存往往是很有限的,像我個人的服務(wù)器配置就是2核4G5M。
4G內(nèi)存對于Java玩家來說,真的不大,開幾個中間件+自己的微服務(wù)真的還蠻擠的,然后又?jǐn)偵螹ySQL這個大冤種。我本機(jī)上的MySQL僅僅只占幾M內(nèi)存(雖然我不怎么用,但是本機(jī)MySQL確實是開著的):
而服務(wù)器的則要占400M,怎么說其實沒什么吞吐量,純粹是自己玩一玩,這內(nèi)存占用屬實有點吃不消啊。。。
解決方案
了解到可以通過修改配置來減小MySQL的內(nèi)存占用,便嘗試了一下,并進(jìn)行了記錄。由于我同時有兩臺服務(wù)器,一臺裝的是windows service 2016,還有一臺裝的是CentOS7,兩臺情況都是差不多的,故同時做兩份記錄,供大家參考。
1. 找到配置文件
- Windows Service 2016
配置文件的默認(rèn)位置是 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,如果有修改,則根據(jù)自己的實際情況找到。
- CentOS7
配置文件的默認(rèn)路徑在 /etc/my.cnf,如果有修改,則根據(jù)自己的實際情況找到。
2. 修改配置文件
Windows上可以用Ctrl + F 進(jìn)行搜索,Linux上可以用 ‘/key’ 進(jìn)行搜索,不會的話可以參考一下百度。
我們需要找到并修改的東西一共有三個:
1.找到 table_definition_cache
,我們修改為400
官方解釋為:可以存儲在定義緩存中的表定義數(shù)(來自.frm文件)。如果使用大量表,可以創(chuàng)建大型表定義緩存以加快表的打開速度。與普通的表緩存不同,表定義緩存占用更少的空間,并且不使用文件描述符。最小值和默認(rèn)值均為400。
2.找到 table_open_cache
,我們修改為256
MySQL每打開一個表,都會讀入一些數(shù)據(jù)到table_open_cache緩存中,當(dāng)MySQL在這個緩存中找不到相應(yīng)信息時,才會去磁盤上讀取。
官方解釋為:所有線程的打開表數(shù)。增加該值會增加mysqld所需的文件描述符的數(shù)量。因此,您必須確保在[mysqld safe]部分的變量“open files limit”中將允許打開的文件量設(shè)置為至少4096。
3.找到 performance_schema
,修改為off
如果找不到這個的話,直接在合適的地方加上 performance_schema = off
即可。
用于監(jiān)控MySQL server在一個較低級別的運(yùn)行過程中的資源消耗、資源等待等情況,關(guān)閉之后可以節(jié)省開銷,不會使server的行為發(fā)生變化。
修改完之后保存退出。
3. 重啟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ù)實際請求進(jìn)行調(diào)整才行。
到此這篇關(guān)于MySQL占用內(nèi)存過大解決的文章就介紹到這了,更多相關(guān)MySQL占用內(nèi)存過大內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫遠(yuǎn)程訪問權(quán)限如何打開(兩種方法)
本文通過兩種方法給大家介紹MySQL數(shù)據(jù)庫遠(yuǎn)程訪問權(quán)限的打開方法,非常不錯,實用性非常高,感興趣的朋友一起看看吧2016-05-05使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法
這篇文章主要介紹了使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法,需要的朋友可以參考下2015-09-09MySQL中建表時可空(NULL)和非空(NOT NULL)的用法詳解
這篇文章主要介紹了MySQL中建表時可空(NULL)和非空(NOT NULL)的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式)
這篇文章主要介紹了mysql5.6 解析JSON字符串方式(支持復(fù)雜的嵌套格式),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Mysql| 使用通配符進(jìn)行模糊查詢詳解(like,%,_)
這篇文章主要介紹了Mysql| 使用通配符進(jìn)行模糊查詢詳解(like,%,_),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08解析SQL 表結(jié)構(gòu)信息查詢 含主外鍵、自增長
本篇文章是對SQL 表結(jié)構(gòu)信息查詢 含主外鍵、自增長進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06