使用 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 应用程序的速度,尤其是当我们的应用程序主要进行读取时。 使用上述方法监控状态,并查看其随时间的变化情况。
相关文章
使用 Mysqldump 备份 MySQL 中的数据
发布时间:2023/05/09 浏览次数:192 分类:MySQL
-
本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。
更新 MySQL 表中的主键
发布时间:2023/05/09 浏览次数:61 分类:MySQL
-
本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。
在 MySQL 中获取命令历史记录
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史
Oracle 的 decode 函数在 MySQL 中的等价物
发布时间:2023/05/09 浏览次数:115 分类:MySQL
-
本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 MySQL 中转换为十进制
发布时间:2023/05/09 浏览次数:150 分类:MySQL
-
有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。
在 MySQL 中获取当前日期和时间
发布时间:2023/05/09 浏览次数:145 分类:MySQL
-
本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间
更改 MySQL 服务器中的 max_allowed_packet Size
发布时间:2023/05/09 浏览次数:142 分类:MySQL
-
本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。