本篇文章給大家?guī)?lái)了關(guān)于mysql的相關(guān)知識(shí),其中主要整理了占用內(nèi)存過(guò)大解決方法的相關(guān)問(wèn)題,分別使用windows和CentOS7兩種系統(tǒng)來(lái)解決該問(wèn)題,下面一起來(lái)看一下,希望對(duì)大家有幫助。
推薦學(xué)習(xí):mysql視頻教程
前言
對(duì)于部分小資玩家來(lái)說(shuō),服務(wù)器數(shù)量和內(nèi)存往往是很有限的,像我個(gè)人的服務(wù)器配置就是2核4G5M。
4G內(nèi)存對(duì)于Java玩家來(lái)說(shuō),真的不大,開(kāi)幾個(gè)中間件+自己的微服務(wù)真的還蠻擠的,然后又?jǐn)偵螹ySQL這個(gè)大冤種。我本機(jī)上的MySQL僅僅只占幾M內(nèi)存(雖然我不怎么用,但是本機(jī)MySQL確實(shí)是開(kāi)著的):
而服務(wù)器的則要占400M,怎么說(shuō)其實(shí)沒(méi)什么吞吐量,純粹是自己玩一玩,這內(nèi)存占用屬實(shí)有點(diǎn)吃不消啊。。。
解決方案
了解到可以通過(guò)修改配置來(lái)減小MySQL的內(nèi)存占用,便嘗試了一下,并進(jìn)行了記錄。由于我同時(shí)有兩臺(tái)服務(wù)器,一臺(tái)裝的是windows service 2016,還有一臺(tái)裝的是CentOS7,兩臺(tái)情況都是差不多的,故同時(shí)做兩份記錄,供大家參考。
找到配置文件
Windows Service 2016
配置文件的默認(rèn)位置是C:ProgramDataMySQLMySQL Server 8.0my.ini,如果有修改,則根據(jù)自己的實(shí)際情況找到。
CentOS7
配置文件的默認(rèn)路徑在/etc/my.cnf,如果有修改,則根據(jù)自己的實(shí)際情況找到。
修改配置文件
Windows上可以用Ctrl + F 進(jìn)行搜索,Linux上可以用 ‘/key’ 進(jìn)行搜索,不會(huì)的話(huà)可以參考一下百度。
我們需要找到并修改的東西一共有三個(gè):
-
找到
table_definition_cache
,我們修改為400官方解釋為:可以存儲(chǔ)在定義緩存中的表定義數(shù)(來(lái)自.frm文件)。如果使用大量表,可以創(chuàng)建大型表定義緩存以加快表的打開(kāi)速度。與普通的表緩存不同,表定義緩存占用更少的空間,并且不使用文件描述符。最小值和默認(rèn)值均為400。
-
找到
table_open_cache
,我們修改為256MySQL每打開(kāi)一個(gè)表,都會(huì)讀入一些數(shù)據(jù)到table_open_cache緩存中,當(dāng)MySQL在這個(gè)緩存中找不到相應(yīng)信息時(shí),才會(huì)去磁盤(pán)上讀取。
官方解釋為:所有線(xiàn)程的打開(kāi)表數(shù)。增加該值會(huì)增加mysqld所需的文件描述符的數(shù)量。因此,您必須確保在[mysqld safe]部分的變量“open files limit”中將允許打開(kāi)的文件量設(shè)置為至少4096。
-
找到
performance_schema
,修改為off如果找不到這個(gè)的話(huà),直接在合適的地方加上
performance_schema = off
即可。用于監(jiān)控MySQL server在一個(gè)較低級(jí)別的運(yùn)行過(guò)程中的資源消耗、資源等待等情況,關(guān)閉之后可以節(jié)省開(kāi)銷(xiāo),不會(huì)使server的行為發(fā)生變化。
修改完之后保存退出。
重啟MySQL
Windows Service 2016
以管理員身份啟動(dòng)控制臺(tái),輸入 net stop mysql,然后再輸入 net start mysql。
重啟之后還占62M。
CentOS7
控制臺(tái)輸入 service mysqld restart 即可重啟。
如果不行的話(huà),可以試試 /etc/init.d/mysqld restart
這個(gè)指令。
重啟之后占用92M,比Windows那臺(tái)多點(diǎn)。
后記
通過(guò)這種方法確實(shí)可以降低mysql的內(nèi)存占用,但我這只是通過(guò)降低性能來(lái)?yè)Q取內(nèi)存罷了,如果對(duì)吞吐量要求比較高的情況,那肯定是不能這樣直接修改的,得根據(jù)實(shí)際請(qǐng)求進(jìn)行調(diào)整才行。
推薦學(xué)習(xí):mysql視頻教程