我并不是说实际安装它。我目前使用 LAMP 进行开发,并希望开始将 memcached 用于高流量站点。应该缓存哪些类型的数据库调用?(全部?)在开发服务器上进行负载测试的好方法是什么?是否有我应该首先在我的生产站点上查看的基准?该站点主要是选择很少更新/插入的。就内存使用与流量而言,是否应遵循任何一般准则,或者主要是通过反复试验?
谢谢。
始终先测量,然后优化。写下您的主要瓶颈并对其进行一些良好的性能测试。
目前没有多少基准测试程序可以模拟您自己的负载,我不认为我可以向您推荐一个,因为每个站点都是独一无二的。
但是有一些工具可以尝试模拟高流量。
首先,这取决于您必须使用多少内存、您需要数据的频率以及数据更新的频率。
应该缓存哪些类型的数据库调用?(全部?)
如果您以与您选择它的速度大致相同的速度更新数据,那么它可能不值得缓存。
正如 Eric 所说,下拉列表和您用于站点的任何其他静态内容都可以很好地利用 memcache。
更新后请记住删除/刷新缓存的项目。
什么是在开发服务器上进行负载测试的好方法?
不确定您对此有什么样的负载测试。
是否有我应该首先在我的生产站点上查看的基准?该站点主要选择很少的更新/插入。
检查您正在进行的查询类型,可能记录它们以及调用的次数。最频繁的可能会被缓存。
还要确保没有任何其他可以先进行的 sql 优化。
就内存使用与流量而言,是否应遵循任何一般准则,或者主要是通过反复试验?
我认为内存与流量之间的关系并不大。我会弄清楚你的盒子需要什么样的内存才能在高峰流量时间运行,并相应地设置内存缓存的内存限制。
我会先从支持次要功能的查询开始。观察它如何响应首先被缓存,稍微修改一下。然后当您了解您的网站对其的反应时,然后开始尝试缓存其他查询。我从未使用过 memcached,但我正在使用 codeigniter 中的查询缓存。
我从缓存查询开始,这些查询用于填充我网站上的某些下拉框和表单元素。它们很少更改,并且如果没有管理操作(例如将新文件加载到将记录添加到我的表中的数据库),它们也不会更改。如果您有任何类似的疑问,我建议您先尝试一下。
如果您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
在那里。