Hi, I’m Shendi
Mysql启动占用内存过高解决
前言
最近服务器内存不够用了,甚至还出现了内存溢出问题,导致程序宕机。但请求与用户量并没有多少,所以从各种启动的程序中想方设法的尽可能的减少其占用的内存。
而在我的服务器中,Mysql服务占大头,吃了400多MB
经过修改配置,优化,最后降到100多MB,如下
减少内存占用的几个方法
使用本地数据库来进行测试。目前什么都没有配置也没有连接,Mysql 服务占用 360MB
调整表缓存与表定义缓存数量
在mysql配置文件 my.ini 中,[mysqld]
部分,新增或修改下面两个项
- table_open_cache(打开的表缓存数量)
- 表缓存是MySQL用来存储已经被打开的表的一种内存数据结构,可以提高查询性能
- table_definition_cache(打开的表定义缓存数量)
- 表定义缓存用于存储表的定义信息,包括列的数量、类型、索引等
按照自己的需求更改,我的表不超过100个,于是我直接设置100
table_open_cache=100
table_definition_cache=100
重启 mysql 后发现内存降至 246MB,较之前少了一百多MB
关闭 performance_schema
将上面的操作注释,依然是360MB
同样,在mysql的my.ini文件中的[mysqld]
部分加入下面这样的代码
performance_schema=off
performance_schema 是MySQL的一个特殊模式,用于监控数据库服务器的性能和运行状态。通过它可以查看数据库服务器的性能指标,如查询执行情况、连接情况、内存使用情况等。如果performance_schema=off,则不会记录这些性能指标,也就无法通过performance_schema来查看数据库服务器的性能状态。
将其关闭后,重启Mysql服务,发现内存占用一下就少了很多。从360MB变到70多MB
结合第一个方法,内存变动不大
剩下的就是调整连接数等,但对我来说,现在的内存占用已经可以了。
END