1、查询缓存
查询缓存就是缓存sql语句和查询结果,如果运行相同的sql,服务器直接从缓存中取,不去解析和执行sql语句。
当数据被修改后,在查询缓存中的任何相关数据均被清除,对于频繁更新的表不适合使用缓存。
set session query_cache_type = ON 设置缓存开启
set session query_cache_type = OFF 关闭查询缓存
select @@query_cache_type; 查询缓存是否开启
show variable like ‘hava_query_cache’; 查询系统缓存是否可用
show status like 'Qcache_hits'; 查询缓存累计命中数
查询缓存相关参数
hava_query_cache 是否支持查询缓存
query_cache_limit 缓存的最大结果集 默认1MB
query_cache_min_res_unit 设置分配内存块的最小体积,如果小会节省内存,但是会使系统频繁分配内存
quert_cache_size 设置查询缓存使用的总内存字节数
query_cache_type 设置是否开启查询缓存 ON 表示除了SQL_NO_CACHE的查询以外,缓存所以结果集;DEMAND表示仅缓存SQL_CACHE的查询;OFF表示关闭缓存;
2、监控维护查询缓存
flush query cache 用户整理查询缓存,不会从缓存中移除任何查询结果
reset query cache 移除查询缓存中的所有的查询结果
show status like ‘@Qcache%’;监视查询缓存的使用情况
+ ------------------------------ + ----------- +
| Variable_name | 价值|
+ ------------------------------ + ----------- +
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 195035136 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | 关闭|
+ ------------------------------ + ----------- +
5行集(0.00 sec)
3、优化查询缓存注意点
- 数据库设计的时候,尽量不要使用一张比较大的表,可以使用很多小的表,这样可以提高数据查询缓存的效率
- 在对数据库进行写操作的时候尽量一次性写入,因为逐个写入每次写入都会让数据库缓存功能失效或清理缓存数据,此时服务器可能会挂起相当长时间
- 尽量不要在表或者数据库的基础上控制查询缓存,可以采用SQL_CACHE和SQL_NO_CACHE来决定是够使用缓存查询
- 对于包含很多写入任务的应用程序,关闭查询缓存功能可以改进服务器性能
- 禁用查询缓存时可以将query_cache_size参数设置为0,这样就不会消耗内存
- 如果想少数使用查询缓存,可以设置query_cache_type设置为DEMAND,然后使用查询缓存的后面添加SQL_CACHE,不适用查询缓存的地方添加SQL_NO_CACHE