解决MySQL 5.6版本占用内存高的问题

小胖的服务器里安装了MySQL5.6版本,配置好后一启动,运行一段时间后常发现MySQL经常自动挂了,分析了很久后发现是因为内存不够用所引起的。

后面发现MySQL在一开启内存都占到了40%多,而且无论怎么调整cache或禁用Innodb都没法解决内存居高不小的问题,这对小胖我这种苦逼只能在1G内存的VPS中运行WEB,已经无力再为MySQL提供400MB以上的物理内存。

MySQL 5.6相比于前代GA版本性能提升显著,但默认缓存设置对于小型站点并不合理,在5.5版本里就新增了一个性能优化的引擎 PERFORMANCE_SCHEMA,这个功能在5.5默认是关闭的,而到了5.6版本后就默认开启了,这也是以前的版本在启动后内存都占用不高。

可以在my.cnf关闭 PERFORMANCE_SCHEMA 这个功能

performance_schema=off

这个功能在 cpu 资源比较充足的情况下,是可以考虑开启,对性能的影响还是可以得,但是对于 cpu 资源比较紧缺的话,还是关闭比较好,对性能有影响,但是比起资源来说微不足道。当然也可以不关闭就可以把内存给降下来,通过修改 my.cnf 文件中的performance_schema_max_table_instances参数就可以有效的能够有效降低内存占用。

以下是5.6默认的设置

performance_schema_max_table_instances 12500

table_definition_cache 1400

table_open_cache 2000

可以调成,或者在小点都可以。

performance_schema_max_table_instances=400

table_definition_cache=400

table_open_cache=256

修改后重启 MySQL ,其内存占用即可从400MB以上降低至40MB左右。

performance_schema_max_table_instances 这个参数是检测对象最大数目

table_definition_cache 这个参数是缓存frm文件。