我的服务器是Debian 9.0。它有32位内存的固态硬盘。以及具有4 (8)个内核的i7处理器。我有4个网站。其中两个非常小,两个很大。大型数据库(mysql)的大小约为120 + 60 MB。我的also服务器是nginx,也使用varnish。
我想了解linux,所以我开始阅读关于调优nginx,mysql,php-fpm等的文章。我正在调优mysql,安装了mysqltuner。它建议我将"query_cache_size“和"query_cache_type”设置为0,这意味着禁用缓存。
我做到了。然而,我的网站变得非常慢。我的680KB网页在700ms内加载,但在禁用query_cache后,速度下降到几乎1.5秒。这很有趣。我将query_cache_size设置回128M。所以速度恢复了。我不断地阅读更多关于设置query_cache的文章和Zaitsev的文章(在percona.com中),他说使用大型缓存是有问题的,他在文章的末尾说:“在许多情况下,你可能想完全禁用查询缓存,而使用外部缓存,比如memcached,它没有这个问题。”
https://www.percona.com/blog/2007/03/23/beware-large-query_cache-sizes/
所以,我安装了REDIS (他们说REDIS比memcached更好,而且做得更好)。我安装了它,我还安装了redis的wordpress插件。我监控redis,它工作得很好。然而,会发生两件事:
1) Redis并没有提高我的站点速度。都是一样的。没什么区别。也许是因为我的网页很小(最多700kb),我的数据库也很小。
2)当我禁用mysql查询缓存时,我的网站再次变得非常慢。
那么redis不是应该缓存所有的数据库条目并使用它们比mysql快得多吗?为什么我关闭mysql的查询缓存后网页速度会变慢?
发布于 2017-12-28 21:07:05
我同意700ms太长了。如果设计得当,您应该能够在这段时间内执行100个MySQL查询;听起来您不是这样吗?
我同意大型查询缓存通常是不明智的:
你有一个中等大小的数据库--所有东西都在1 1GB以下?使用32 GB的RAM,您应该能够一直缓存所有数据和索引。因此,速度减慢将出现在糟糕的索引和/或糟糕的查询公式中。
我希望你使用的是InnoDB,而不是MyISAM。对于InnoDB,您需要将innodb_buffer_pool_size设置为不超过可用内存的70%。您有几个产品在32G中运行??所以,我不会说32个人中的70%。(注意:交换对性能来说很糟糕。)既然你的数据如此之少,也许2G将是一个很好的设置?
让我们来看看你的“太慢”网页中的查询。另外,让我们看看表的SHOW CREATE TABLE。你知道“复合”索引吗?你知道不要在函数调用中隐藏索引列吗?
也许我的可以帮到你。如果你使用的是WP,它包含了一个关于如何加速wp_postmeta的章节。如果您需要更多帮助,请用最慢的查询、它的EXPLAIN和它的模式开始另一个问题。
https://stackoverflow.com/questions/47959725
复制相似问题