MySQL 消耗了缓存中的几乎所有内存?

MySQL 消耗了缓存中的几乎所有内存?

我正在运行一个具有 24G RAM 的服务器。这里唯一运行的是配置为 Master 的 MySQL 服务器。

当我通过 free -m 检查内存时,我得到了以下信息:

             total       used       free     shared    buffers     cached
Mem:         24158      24027        131          0        131      23050

大约 23G 缓存。对我来说这似乎很多。

我还在 my.cnf 中将缓存设置为 0

query_cache_size        = 0

我如何检查到底缓存了什么?而且重新启动 mysql 也无法清除缓存。Aflush tables也没有帮助。

答案1

你看到的是两个不同的缓存。free -m告诉你操作系统为磁盘缓存使用了多少内存,而不是 MySQL 为数据库缓存使用了多少内存。操作系统应该尽可能多地使用内存作为磁盘缓存——为什么你不想要尽可能大的缓存呢?如果应用程序需要,这些内存总是可用的。参见这里详细讨论 Linux 内存缓存的使用情况。

答案2

这意味着内核几乎使用了所有内存来缓存数据。您的系统可能几乎处于空闲状态,所以这没那么重要,但要对其进行优化,您应该查看 mysql 配置...

如果您认为查询缓存对您有好处,请启用它并为其分配例如 128 MB 的空间。然后您可以在 mysql 中检查它的使用情况。如果您主要运行 SELECT 查询而不是 INSERT/UPDATE,查询缓存可能对您有好处。它很少导致问题,因此您可以放心地将其启用。

然后,如果您使用的是 MyISAM 存储引擎,则应通过 kay_buffer 变量启用一些内存。如果使用 InnoDB,一般建议将 50-80% 的可用内存分配给 innodb_buffer_pool_size(如果这是专用的 mysql 服务器)。Mysql 和 InnoDB 比 linux 内核更清楚到底要缓存什么。

对于释放 mysql(读取)缓存,我认为只有 mysql restart 才有用。要释放系统缓存,请使用命令:

echo 3 > /proc/sys/vm/drop_caches

http://linux-mm.org/Drop_Caches

相关内容