max_connections参数对mysql初始化内存的影响

时间:2022-05-05 07:31:59

今天发现mysql的max_connections 参数的大小对mysql内存初始化大小影响非常大;

公司的amp监控项目组件越来越多,部署需要的内存也越来越多,测试环境下,两年前4G内存就能跑的应用,现在8G都不够用,经常发生oom-killer,而且因为物理机资源已经超量分配,导致虚拟机频繁挂掉,严重影响了研发与测试的进度;

今天过了一遍所有应用的内存配置,修改了部分应用jvm的内存大小设置,节省了不少内存,最后发现mysql启动后就占用了1.3G内存,因为是研发与功能测试环境,对性能要求不高,于是就开始对mysql开刀;

首先发现innodb_buffer_pool_size=1G,于是将其更改为512M,重启后发现内存只减少了200多M,比较纳闷为什么不是减少了512M;

继续优化,使用show status参数查看了下打开表的缓存,发现默认值如下:

 table_definition_cache =1400
performance_schema_max_table_instances=12500
table_open_cache=2000

于是将其设置为以下值

performance_schema_max_table_instances=200
table_definition_cache=200
table_open_cache=128

重启后发现又减少了将近200M,但是还是占用了了将近1G的内存;
然后有检查了下各种cache的默认值,发现都不大,很纳闷这些内存都是哪里占用的;
最后注意到my.cnf文件里面配置了max_connections参数过大:

max_connections = 5000

竟然是5000,尝试将其更改为500后,内存竟然马上下降到了283M,真惊喜啊,没想到这个参数对mysql初始化内存影响这么大;