首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis不是应该缓存数据库条目吗?

Redis不是应该缓存数据库条目吗?
EN

Stack Overflow用户
提问于 2017-12-24 18:15:09
回答 1查看 471关注 0票数 0

我的服务器是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的查询缓存后网页速度会变慢?

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 21:07:05

我同意700ms太长了。如果设计得当,您应该能够在这段时间内执行100个MySQL查询;听起来您不是这样吗?

我同意大型查询缓存通常是不明智的:

  • 它从其他缓存中取出内存。
  • 对表的每次修改都会导致该表的QC中的所有条目被清除。如果表经常更改,您将承受清除的开销,而从缓存中获得的好处很少或根本得不到任何好处。

你有一个中等大小的数据库--所有东西都在1 1GB以下?使用32 GB的RAM,您应该能够一直缓存所有数据和索引。因此,速度减慢将出现在糟糕的索引和/或糟糕的查询公式中。

我希望你使用的是InnoDB,而不是MyISAM。对于InnoDB,您需要将innodb_buffer_pool_size设置为不超过可用内存的70%。您有几个产品在32G中运行??所以,我不会说32个人中的70%。(注意:交换对性能来说很糟糕。)既然你的数据如此之少,也许2G将是一个很好的设置?

让我们来看看你的“太慢”网页中的查询。另外,让我们看看表的SHOW CREATE TABLE。你知道“复合”索引吗?你知道不要在函数调用中隐藏索引列吗?

也许我的可以帮到你。如果你使用的是WP,它包含了一个关于如何加速wp_postmeta的章节。如果您需要更多帮助,请用最慢的查询、它的EXPLAIN和它的模式开始另一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47959725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档