查询缓存
- 优点:(1)对于某些频繁出现的查询语句,可以减少I/O。
- 缺点:(1)查询缓存需要占用一定的内存。(2)每次查询执行前都要先检查缓存,故不一定是有利的。
- 缓存未命中的原因:(1)查询不在缓存中 (2)缓存失效 (3) 查询中包含不确定的函数,比如current_date。因此如果查询希望使用缓存,就直接使用当时时间的字面量,比如‘2018-1-29’这种即可。
- 缓存失效:(1)在InnoDB中,如果一个事务对表进行了修改,那在事务提交前,缓存都会失效。 (2)产生了大量碎片,因为缓存使用的分配算法是最佳分配算法(最合适的大小分给它,易产生碎片,可以通过选择合适的块大小来减少这种情况)
- 前面提到每次查询都会先检查缓存。如果需要缓存的查询很少,可以将query_cache_type设置为demand,然后对需要缓存的查询后面添加sql_cache。这样可以更细粒度的控制缓存的使用
- 如果写入操作很多(前面提到修改表的时候会使缓存失效),这个时候可以禁用缓存,并将缓存大小query_cache_size设置为0,这样就不会占用内存。
- 基于上一条,如果两者都要,那么就让写操作成批量的执行,而不是逐个执行。
调优参数
- query_cache_type:既是会话级变量也是全局性变量。有on/off/demand三个属性
- query_min_cache_res_unit:设置分配缓存最小块大小。
- query_cache_limit:限制缓存存储的最大结果,超过不会被缓存