小胖的服务器里安装了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文件。