我正在运行一个24G内存的服务器。 在这里运行的唯一的东西是configuration为主服务器的MySQL服务器。
当我通过免费检查内存-m我得到这个:
total used free shared buffers cached Mem: 24158 24027 131 0 131 23050
约。 23G在caching中。 这对我来说似乎很多。
我也在my.cnf中将caching设置为0
query_cache_size = 0
我怎样才能检查什么是完全caching? 此外重新启动mysql不会清除caching。 flush tables也没有帮助。
你正在看两个不同的caching。 free -m告诉你操作系统用于磁盘caching的内存有多less,而不是MySQL用于数据库caching的数量。 操作系统应该使用尽可能多的内存,因为它可以为磁盘caching – 为什么你不希望尽可能大的caching? 如果应用程序需要,那么内存总是可用的。 请参阅这里了解有关caching的Linux内存使用情况。
这意味着几乎所有的内存都被内核用来caching数据。 你可能几乎空闲的系统,所以这并不重要,但要优化它,你应该看看MySQLconfiguration…
如果您认为可以从查询caching中受益,则启用它并给它例如128 MB。 那么你可以在mysql中检查它是如何被利用的。 如果你主要运行SELECT查询而不是很多INSERT / UPDATE,查询caching可能对你有好处。 它很less引起问题,所以你可以放心地把它启用。
那么如果你使用的是MyISAM存储引擎,那么应该通过kay_buffervariables来启用一些内存。 如果使用InnoDB,一般build议是给innodb_buffer_pool_size(如果这是专用的mysql服务器)50-80%的可用内存。 Mysql和InnoDB比Linux内核更清楚究竟要caching什么。
为了释放mysql(读)caching,我认为只有mysql重启有帮助。 释放系统caching,使用命令:
echo 3 > /proc/sys/vm/drop_caches