使用MySQL查询缓存来加速网站
加快Web应用程序速度的最佳方法之一是在数据库中启用查询缓存,该数据库将常用的SQL查询缓存在内存中,以便下一个发出相同请求的页面几乎可以即时访问。
该方法之所以如此强大,是因为我们不必对Web应用程序进行任何更改,而只需要牺牲一点内存即可。这不会解决我们所有的问题,但是绝对不会造成伤害。
注意:如果应用程序频繁更新表,那么查询缓存将不断清除,我们将不会从中获得任何好处。这是最适合对数据库进行读取的应用程序的理想选择,例如WordPress博客。如果我们在共享主机上运行,这也将不起作用。
在服务器运行时启用缓存
我们要做的第一件事是确保我们安装的MySQL实际上具有可用的查询缓存支持。大多数发行版都可以,但是仍然应该检查。
我们需要从MySQL控制台运行此命令,它将告诉我们查询缓存是否可用。
mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
不要误认为这实际上启用了查询缓存,因为大多数托管提供程序默认不会启用该功能。奇怪的是,我的Ubuntu Feisty安装已经启用了它
接下来,我们需要检查并查看是否启用了查询缓存。我们将需要检查多个变量,因此我们最好通过检查变量query%一次完成所有操作
mysql> show variables like 'query%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | +------------------------------+---------+
以下是列表中的重要项目及其含义:
query_cache_size这是缓存的大小(以字节为单位)。将此值设置为0将有效地禁用缓存。
query_cache_type此值必须为ON或者1,以默认情况下启用查询缓存。
query_cache_limit这是将被缓存的最大查询大小(以字节为单位)。
如果将query_cache_size值设置为0或者只想更改它,则需要运行以下命令,请记住该值以字节为单位。例如,如果我们想为高速缓存分配8MB,我们将使用1024 * 1024 * 8 = 8388608作为值。
SET GLOBAL query_cache_size = 8388608;
同样,可以使用相同的语法设置其他选项:
SET GLOBAL query_cache_limit = 1048576; SET GLOBAL query_cache_type = 1;
现在我们如何确定它是否确实在工作?我们可以使用SHOW STATUS命令提取所有以Qc开头的变量,以了解幕后情况。
mysql> SHOW STATUS LIKE 'Qc%'; +-------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | +-------------------------+--------+ 8 rows in set (0.00 sec)
我们会在统计数据中注意到,我还有足够的可用内存。如果服务器显示大量的低级修剪,则可能需要考虑增加此值,但我不会在用于Web服务器的查询缓存上花费过多的内存,而需要为apache,php,ruby或者其他资源保留可用内存我们正在使用。
在配置文件中启用
如果我们希望这些更改在mysql服务器重新启动或者重启后仍然存在,则需要将它们添加到MySQL的/etc/mysql/my.cnf配置文件中。请注意,它可能在安装中的其他位置。
使用sudo或者root模式的文本编辑器打开文件,然后添加这些值(如果文件中尚不存在这些值)。如果确实存在,则取消注释。
query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576
查询缓存可以显着提高Web应用程序的速度,尤其是在应用程序确实主要读取的情况下。