我并不是说实际安装它。我目前使用LAMP进行开发,并希望开始在高流量站点使用memcached。应缓存哪些类型的db调用? (所有?)以及在开发服务器上进行负载测试的好方法是什么?我是否应首先在我的生产网站上查看基准测试?该网站主要是选择,只有很少的更新/插入。在ram使用与流量之间是否应遵循一般指导原则,还是主要仅通过反复试验?
感谢。
答案 0 :(得分:1)
我将首先使用支持辅助功能的查询。观察它如何响应首先被缓存,稍微修补一下。然后,当您了解您的网站如何对其做出反应时,然后开始尝试缓存其他查询。我从未使用过memcached,但我正在使用codeigniter中的查询缓存。
我开始使用缓存查询,用于填充我网站上的某些下拉框和表单元素。它们很少更改,并且它们不会随着管理操作而更改,例如将新文件加载到向我的表添加记录的数据库中。如果您有任何疑问,我会建议先尝试。
答案 1 :(得分:1)
始终先测量然后优化。写下你的主要瓶颈并对它们进行一些好的性能测试。
目前没有很多基准程序可以模拟你自己的负载,我认为我不能推荐一个,因为每个网站都是独一无二的。
但是有一些工具试图模仿高流量。
答案 2 :(得分:1)
首先,它取决于您需要使用多少内存,需要数据的频率以及数据更新的频率。
应缓存哪些类型的数据库调用? (所有?)
如果您以大约相同的速率更新数据,那么它可能不值得缓存。
正如埃里克所说,下载以及您为网站使用的任何其他静态内容都会充分利用内存缓存。
请记住在更新后删除/刷新缓存的项目。
什么是在开发服务器上进行负载测试的好方法?
不确定您对此进行了哪种负载测试。
我是否应首先在我的生产网站上查看基准测试?该网站主要选择极少的更新/插入。
查看您正在进行的查询类型,可能会记录它们以及调用它们的次数。最常见的可能是缓存。
还要确保没有任何其他可以首先进行的SQL优化。
对于ram使用情况与流量相比,是否存在应遵循的一般指导原则,还是主要仅通过反复试验?
我认为没有太多的公羊与交通关系。我会弄清楚你的盒子需要在高峰时段运行什么样的ram,并相应地设置你的内存缓存限制。
答案 3 :(得分:1)
如果您有很多SELECT
个并且很少写入数据库,那么MySQL的查询缓存应该可以很好地为您缓存数据。
要了解查询缓存的有效性,请尝试以下操作:
> SHOW GLOBAL STATUS LIKE 'Qcache_hits';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| Qcache_hits | 735740 |
+---------------+--------+
1 row in set (0.00 sec)
> SHOW GLOBAL STATUS LIKE 'Com_select';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_select | 5644038 |
+---------------+---------+
1 row in set (0.00 sec)
要查找命中率计算Qcache_hits / (Qcache_hits + Com_select)
在这种情况下,它是735740 / (735740 + 5644038) = 0.1153
这是11%的命中率并且相当差。
如果您在计算机上看到更高的%,那么使用memcached的情况可能会更少。
MySQL的查询缓存在很多情况下运行良好(我怀疑这包括你的)。每次更新表时,缓存条目都会失效(即使您的缓存查询与未更改的行相关),这是一个很大的缺点。在某些情况下,当您和您的应用程序可以比MySQL查询缓存更智能地了解缓存过期时,您可以使用memcached来缓存更接近行级别的项目。
让我知道查询缓存命中率的结果。你甚至可能发现你现在已经禁用了查询缓存(!)
您可以通过运行以下查询来验证它是否已启用:
> SHOW GLOBAL VARIABLES LIKE '%cache';
检查那里的have_query_cache = YES
和query_cache_size > 0
。