Query Cache 在提高数据库性能方面具有非常重要的作用。
其设定也非常简单,仅需要在配置文件写入两行:
query_cache_type 和 query_cache _size,而且 MySQL 的 query cache
非常快!而且一旦命中,就直接发送给客户端,节约大量的 CPU 时间。
当然,非 SELECT
语句对缓冲是有影响的,它们可能使缓冲中的数据过期。一个 UPDATE 语句引起的部分表修改,将导致对该表所有的缓冲数据失效,这是 MySQL
为了平衡性能而没有采取的措施。因为,如果每次 UPDATE 需要检查修改的数据,然后撤出部分缓冲将导致代码的复杂度增加。
query_cache_type
0 代表不使用缓冲, 1 代表使用缓冲,2 代表根据需要使用。
设置 1 代表缓冲永远有效,如果不需要缓冲,就需要使用如下语句:
SELECT
SQL_NO_CACHE * from my_table WHERE ...
如果设置为 2 ,需要开启缓冲,可以用如下语句:
SELECT
SQL_CACHE * from my_table WHERE ...
用 SHOW STATUS 可以查看缓冲的情况:
mysql>
show status like 'Qca%';
+-------------------------+----------+
|
Variable_name | Value |
+-------------------------+----------+
|
Qcache_queries_in_cache | 8 |
| Qcache_inserts | 545875 |
|
Qcache_hits | 83951 |
| Qcache_lowmem_prunes | 0 |
|
Qcache_not_cached | 2343256 |
| Qcache_free_memory | 33508248 |
|
Qcache_free_blocks | 1 |
| Qcache_total_blocks | 18 |
+-------------------------+----------+
8
rows in set (0.00 sec)
如果需要计算命中率,需要知道服务器执行了多少 SELECT 语句:
mysql>
show status like 'Com_sel%';
+---------------+---------+
|
Variable_name | Value |
+---------------+---------+
| Com_select |
2889628 |
+---------------+---------+
1 row in set (0.01 sec)
在
本例中, MySQL 命中了 2,889,628 条查询中的 83,951 条,而且 INSERT 语句只有 545,875
条。因此,它们两者的和和280万的总查询相比有很大差距,因此,我们知道本例使用的缓冲类型是 2 。
而在类型是 1
的例子中, Qcache_hits 的数值会远远大于 Com_select 。
阅读(679) | 评论(0) | 转发(0) |