mysql如何判断缓存是否命中
- 缓存使用的是一个引用表,通过一个哈希值的引用,这个哈希值包括了,当前要查询的数据库,客户端协议,查询本身等
- 当判断缓存是否命中时,mysql是不会解析,优化的,使用的是sql语句和客户端发送过来的原始信息。
- 所以任何字符上的不同,例如空格,注释等都会导致缓存不会命中(所以这就导致缓存命中的条件比较苛刻,不同的编码习惯,命中率的影响很大)
查询缓存如何使用内存
- 查询缓存是完全在内存当中,基本的管理维护数据结构大概需要40kb左右的内存资源
- mysql用于查询缓存的内存被分成了一个个的内存块,数据块是变长的;每个数据块存储了自己的类型,大小,和存储的数据本身,外加前一个和后一个的数据指针
什么时候下查询缓存能发挥作用
- 当收益大于成本的时候,比较适合使用查询缓存(例如:缓存那些需要大量消耗资源的查询比较适合查询缓存)
- 查询缓存命中率是一个比较直接的衡量标准,但是它是一个很难判断的值,因为30%的命中率带来的收益不一定比80%的命中率带来的收益低,因为命中率和节省的时间之间没有直接的关系。
- 比较建议的指标:“命中和插入的比值”,Qcache_hits和Qcache_inserts的比值达到3:1时,查询缓存通常是有效的;最好达到10:1
- 最好的判断的方法就是使用通过查看某类查询是否增大和减小查询时间来判断。
- 成本