zoukankan      html  css  js  c++  java
  • mysql 查询缓存

    1.当前表的查询缓存状态查询:

    SHOW VARIABLES LIKE '%query_cache%';
    

     2.sql语句会从查询缓存读条件:

      sql完全一致:即使多一个空格或者大小写不同都认为不同;如果使用不同的字符集、不同的协议等也会被认为是不同的查询而分别进行缓存。

    3.查看查询缓存命中次数:

    SHOW STATUS LIKE 'Qcache_hits';
    

     4.查询缓存失效:

      在表的结构或数据发生改变时,查询缓存中的数据不再有效。有这些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。

    5.保存至查询缓存:

      缓存会在内存中开辟一块内存(query_cache_size)来维护缓存数据,其中有大概40K的空间是用来维护缓存的元数据的(什么是元数据:http://www.cnblogs.com/Alight/p/3982086.html),例如空间内存,数据表和查询结果的映射,SQL和查询结果的映射等.

      保存图示:

    6.查询缓存缺点:

      1.查询缓存需要占用一定的内存;2.每次查询执行前都要先检查缓存,故不一定有利;

    7.调优:

      1.如果需要缓存的查询很少,可以将query_cache_type设置为demand,然后对需要缓存的查询后面添加sql_cache。

      2.如果写入操作很多,这个时候可以禁用缓存,并将缓存大小query_cache_size设置为0,这样就不会占用内存。

      3.如果写操作存在,也想用查询缓存,那么就让写操作成批量的执行,而不是逐个执行。

    8.具体情况分析:

      衡量打开缓存是否对系统有性能提升是一个很难的话题

      1. 通过缓存命中率判断, 缓存命中率 = 缓存命中次数 (Qcache_hits) / 查询次数 (Com_select)

      2. 通过缓存写入率, 写入率 = 缓存写入次数 (Qcache_inserts) / 查询次数 (Qcache_inserts)

      3. 通过 命中-写入率 判断, 比率 = 命中次数 (Qcache_hits) / 写入次数 (Qcache_inserts), 高性能MySQL中称之为比较能反映性能提升的指数,一般来说达到3:1则算是查询缓存有效,而最好能够达到10:1

    9.缓存查询分析步骤:

      

  • 相关阅读:
    WCF和SOA的简介
    .NET 反射应用
    ASP.NET---如何使用web api创建web服务
    获得N位数字字母随机组合
    git的初步使用
    js贪吃蛇
    python多线程
    2013-12-13
    2012-12-12
    2013-12-5
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/9962910.html
Copyright © 2011-2022 走看看