• Mysql缓存中innodb_buffer_pool与Qcache的区别


    innodb buffer pool和Qcache的缓存区别?

    1、Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0;

    2、buffer pool中缓存的是整张表中的数据,缓存在内存,SQL再变只要数据都在内存,那么命中率就是100%。

    一、查询缓存(QueryCache)

    1、关于查询缓存机制

    开启了缓存,会自动将查询语句和结果集返回到内存,下次再查直接从内存中取;

    查询缓存会跟踪系统中每张表,若表发生变化,则和该张表相关的所有查询缓存全部失效,这是和buffer pool缓存机制很大的区别;

    检查查询缓存时,MYSQL不会对SQL做任何处理,它精确的使用客户端传来的查询,只要字符大小写或注释有点不同,查询缓存就认为是不同的查询;

    任何一个包含不确定的函数(比如now()、curren_date())的查询不会被缓存。

    注意:

    查询缓存可改善性能,但是开启查询缓存对读写增加了额外开销。

    1、对于读,在查询前需先检查缓存;

    2、对于写,写入后需更新缓存。

    一般情况下这些开销相对较小,因此需要根据业务权衡是否开启查询缓存。

    二、存储引擎层-innodb buffer pool

    buffer pool是innodb存储引擎带的一个缓存池,查询数据的时候,它首先会从内存中查询,如果内存中存在的话,直接返回,从而提高查询响应时间。Buffer pool是设置的越大越好,一般设置为服务器物理内存的70%。

    案例:

    今天使用sysbench对mysql数据库进行压力测试,学习了一些知识:

    以前没有开启query_cache的时候,sysbench压测出来的结果中,select语句的TPS高达27299。然后今天开启了query_cache缓存后发现select语句的TPS只有16000左右了,发现很是不正常,首先是确定buffer_pool进行了预热,因此我就判断改了配置文件参数引起的问题。因为我开启了缓存,并且缓存设置在10G以上。根据上面所说的可能开启缓存对mysql的读写性能产生了影响。

    不过说实话加大quary_cache确实有助于查询性能,上次就是统计总行数,第一次花了3分多钟,后来1毫秒可就查询处理结果了。

    上面一些是我自己总结的,还有部分内容参考这个链接:https://www.aliyun.com/jiaocheng/1110925.html

  • 相关阅读:
    [ PyQt入门教程 ] Qt Designer工具的使用
    [ PyQt入门教程 ] PyQt5开发环境搭建和配置
    Notepad++提升工作效率小技巧
    思考:测试人员如何快速成长
    Linux /tmp目录下执行脚本失败提示Permission denied
    使用Quartz实现定时任务
    算法篇(前序)——Java的集合
    深入理解 JVM(上)
    Linux集锦
    秒杀系统实现高并发的优化
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10145077.html
Copyright © 2020-2023  润新知