标签:mysql
一、Mysql缓存:
1、缓存包括:
(1)、缓存查询计划避免二次词法语法解析、优化、执行。
(2)、缓存mysql查询语句返回的完整结果,被命中时,mysql会理解返回结果,省去解析、优化和执行等步骤。
2、如何命中缓存?
mysql保存结果于缓存中:把select语句本身做hash计算,计算的结果作为key,查询结果作为value
3、什么样的语句不会被缓存?
查询语句中有一些不确定数据时,不会缓存:如NOW(),CURRENT_TIME();
一般来说,如果查询中包含用户自定义函数、存储函数、用户变量、临时表、
mysql库中系统表或者权限表,一般都不会被缓存。
4、缓存带来的额外开销?
每个查询都得先检查是否命中。
查询结果要先缓存。
5、与缓存相关的变量:
mysql>show global variables like ‘query_cache%‘;
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
query_cache_type:
是否开启缓存功能,其值有三种ON|OFF|DEMAND,其中DEMAND如果要缓存需要在select语句中需要显示指明 sql_cache
query_cache_size:
缓存总空间,单位字节,大小必须为1024的整数倍。如果变更大小,会清空当前缓存。
query_cache_min_res_unit:存储缓存的最小内存块。
(query_cahce_size-Qcache_free_memory)/Qcache_queries_in_cache即(缓存总空间-空闲缓存空间)/缓存个数
query_cache_limit:
单个缓存对象的最大值,超过则不缓存。
可以手动使用sql_no_cache人为地避免尝试缓存返回查询结果超出此参数限定值的语句。
query_cache_wlock_invalidate:如果某表被其他用户连接锁住了,是否仍然从缓存中返回结果,OFF为返回。
6、如果判断缓存命中率:
(1)、mysql>show global status like ‘Qcache%‘;
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16757128 |
| Qcache_hits | 3 |
| Qcache_inserts | 2 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 29 |
| Qcache_queries_in_cache | 2 |
| Qcache_total_blocks | 6 |
+-------------------------+----------+
Qcache_hits :命中缓存的次数。
Qcache_inserts:写入缓存的次数。
Qcache_free_memory:空闲缓存空间。
Qcache_total_blocks:已申请的块数。
Qcache_free_blocks:空闲块数。
Qcache_queries_in_cache:缓存个数
Qcache_not_cached:未被缓存个数
Qcache_lowmem_prunes:因缓存总空间太小,进行修减(腾出老缓存的次数)内存的次数。
(2)、命中率指标:
(2.1)、次数命中率:Qcache_hits/(Com_select+Qcache_hits)
mysql>show global status where variable_name=‘Qcache_hits‘ or variable_name=‘Com_select‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select | 35 |
| Qcache_hits | 3 |
+---------------+-------+
(2.2)、命中率的另一个参考指标为:命中和写入的比率,即Qcache_hits/Qcache_inserts的值,
此值如果大于3:1,则表明缓存也是有效,能达到10:1,则比较理想。
7、碎片整理:
FLUSH QUERY_CACHE
8、清空缓存:
RESET QUERY_CACHE
标签:mysql
原文地址:http://8757576.blog.51cto.com/8747576/1732551