当前位置:网站首页>MySQL takes up too much memory solution

MySQL takes up too much memory solution

2022-07-06 12:13:00 A pole

Preface

For some petty bourgeoisie players , The number of servers and memory are often very limited , My personal server configuration is 2 nucleus 4G5M.

4G Memory for Java Game player , It's really not big , Open several middleware + Their own micro services are really crowded , Then spread it MySQL This big enemy . I'm on this machine MySQL Only a few M Memory ( Although I don't use it very much , But this machine MySQL It's really on ):

 Insert picture description here

And the server accounts for 400M, In fact, there is no throughput , Just play by yourself , This memory occupation is really a little unbearable ...

Solution

Learned that you can reduce by modifying the configuration MySQL Memory footprint , I tried , And recorded . Because I have two servers at the same time , One is equipped with windows service 2016, Another one is equipped with CentOS7, The situation of both sets is similar , So make two records at the same time , For your reference .

Find the configuration file

Windows Service 2016

The default location of the configuration file is C:\ProgramData\MySQL\MySQL Server 8.0\my.ini, If there is any modification , Find out according to your actual situation .

CentOS7

The default path of the configuration file is /etc/my.cnf, If there is any modification , Find out according to your actual situation .

Modify the configuration file

Windows It can be used Ctrl + F To search ,Linux It can be used ‘/key’ To search , If not, you can refer to Baidu .

There are three things we need to find and modify :

  1. find table_definition_cache, Let's change it to 400

    The official explanation is : The number of table definitions that can be stored in the definition cache ( come from .frm file ). If you use a large number of tables , You can create a large table definition cache to speed up the opening of tables . Different from ordinary table caching , The table definition cache takes up less space , And do not use file descriptors . The minimum and default values are 400.

  2. find table_open_cache, Let's change it to 256

    MySQL Every time I open a watch , Will read in some data to table_open_cache In cache , When MySQL When no corresponding information is found in this cache , Will go to the disk to read .

    The official explanation is : Number of open tables for all threads . Increasing this value will increase mysqld Number of file descriptors required . therefore , You have to make sure that at [mysqld safe] Partial variables “open files limit” Set the number of files allowed to be opened to at least 4096.

  3. find performance_schema , It is amended as follows off

    If you can't find this , Directly add performance_schema = off that will do .

    Used to monitor MySQL server Resource consumption in a lower level of running process 、 Resource waiting, etc , You can save money after closing , Will not make server Your behavior changes .

Save and exit after modification .

restart MySQL

Windows Service 2016

Start the console as an administrator , Input net stop mysql, And then you type in net start mysql.

After restart, it still takes 62M.

 Insert picture description here

CentOS7

Console input service mysqld restart You can restart .

 Insert picture description here

If not , You can try /etc/init.d/mysqld restart This instruction .

Occupied after restart 92M, Than Windows That one is more .

 Insert picture description here

Postscript

In this way, it can really reduce mysql Memory footprint , But I'm just trading performance for memory , If the throughput requirements are relatively high , It certainly cannot be modified directly like this , It has to be adjusted according to the actual request .

原网站

版权声明
本文为[A pole]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060913400605.html