最近看了看网站的VPS,发现占用内存90+%,想想没有安装什么东西呀,怎么这么高的占用率,用top命令查看了,发现是mysql引起的。下面是解决方法。
解决思路
MySQL 在启动的时候,会占用一部分的内存来作为缓冲区,这样做的原因是可以优化查询速度,我们可以发现只要查询过一次 MySQL,然后用相同的语句再次查询,第二次查询会比第一次更快,这其中就用到了 MySQL 自身的缓存系统。

MySQL 的缓存机制是当某一个连接访问某张表时,MySQL 会先检查访问的表是否在缓存区中,如果这张表已经在缓存区中打开,那就会直接访问缓存区从而加快查询速度,如果这张表不在缓存区,那就会从实际的数据库文件进行查询,然后再把这张表加入缓存区,以便后续查询加快速度。

由于这个机制我们的 MySQL 在运行过程占用的内存会逐渐增加,1G 的内存不适合用来做 MySQL 的优化,我们要做的就是去掉 MySQL 用来加快查询的各种机制。

解决方案
修改 MySQL 配置文件 my.cnf,找到 [mysqld] 下添加如下内容:
[mysqld]
// 此处省略其他配置,添加如下内容
table_open_cache=200
table_definition_cache=400
performance_schema_max_table_instances=400
performance_schema=off

保存然后重启 MySQL,OK!内存已经降到 10%+ 了。

各个配置项的具体用途:

字段 用途
table_open_cache 高速缓存的大小,每当访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,下次查询该表时首先从高速缓存区查询,如果表在缓存中则直接从缓存查询,从而大幅提高查询速度。
table_definition_cache 定义了内存中可打开的表结构数量。
performance_schema_max_table_instances 检测的表对象的最大数目。
performance_schema 主要用来收集 MySQL 性能参数,启用 performance_schema 之后,server 会持续不间断地监测。【罪魁祸首】

通过调整前面 3 个配置项的值,占用内存均有 1~3% 程度的降低,罪魁祸首便是 performance_schema,将其设置为 off 之后,内存直接降低了 20%!

我的世界

作者 isdiy.net

爱来DIY 收集资料,兴趣收集。isdiy.net

发表评论