0x01

MySQL查询缓存

用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析、优化和执行等操作

如何检查缓存??
MySQL保存结果与缓存中:
把select语句本身做hash计算,计算的结果作为key,查询结果作为value
什么样的语句不会被缓存?
查询语句中有一些不确定数据时,不会缓存;例如now(),current_time();一般来说,如果查询中包含用户自定义函数、存储函数、用户变量、临时表、mysql库中系统表、或者任何包含权限的表,一般都不会缓存

缓存会带来额外开销
1、每个查询都会先检查是否命中
2、查询结果要先缓存
mysql> show global variables like 'query_cache%';
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
query_cache_type:查询缓存类型;是否开启缓存功能,开启方式有三种{ON|OFF|DEMAND}
DEMAND:意味着select语句明确使用sql_cache选项才会缓存
query_cache_size:总空间。单位为字节,大小必须为1024的整数倍。mysql启动时,会一次分配并立即初始化这里指定大小的内存空间;这意味着,如果修改此大小,会清空缓存并重新初始化的
query_cache_min_res_unit:存储缓存的最小内存块 (query_cache_size-Qcache_free_memory)/Qcache_queries_in_cache能够获得一个理想的值
query_cache_limit:单个缓存对象的最大值,超出时则不予缓存;手动使用SQL_NO_CACHE可以人为的避免尝试缓存返回超出此参数限定值得语句
query_cache_wlock_invalidate:如果某个表被其他用户连接锁住了,是否仍然从缓存中返回结果,OFF表示返回

如何判断命中率:
分为次数和字节命中率

mysql> show global status like 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks(空闲块数) | 1 |
| Qcache_free_memory(空闲空间) | 16759688 |
| Qcache_hits(命中次数) | 0 |
| Qcache_inserts(向缓存空间中插入的缓存的次数) | 0 |
| Qcache_lowmem_prunes(内存太小,修剪内存的次数) | 0 |
| Qcache_not_cached(没被缓存的个数) | 8 |
| Qcache_queries_in_cache(缓存中缓存的查询个数) | 0 |
| Qcache_total_blocks(总块数) | 1 |
+-------------------------+----------+

碎片整理 flush query_cache
清空缓存 reset query_cache

计算命中率:
show global status where Vaiable_name='Qcache_hits' OR Variable_name='Com_Select';
Qcache_hits/(Qcache_hits+Com_Select)

也可以参考另外一个指标,命中和写入的比率,即Qcache_hits/Qcache_inserts的值,此比值如果能大于3:1.则表明缓存也是有效的,能达到10:1,为比较理想的情况

缓存优化思路
1.批量写入,而非多次单个写入
2.缓存空间不宜过大,因为大量缓存同事失效时会导致服务器假死
3.必要时,使用sql_CACHE和sql_no_cache手动控制缓存。
4.对写密集型的应用场景来说,禁用缓存反而提高性能。

mysql基础之-mysql查询缓存(九)的更多相关文章

  1. MySQL基础架构之查询语句执行流程

    这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...

  2. MySQL/MariaDB数据库的查询缓存优化

    MySQL/MariaDB数据库的查询缓存优化 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL架构 Connectors(MySQL对外提供的交互接口,API): ...

  3. (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)

    (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...

  4. (3.14)mysql基础深入——mysql 日志分析工具之pt-querty-digest【待完善】

    (3.14)mysql基础深入——mysql 日志分析工具之pt-querty-digest 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢 ...

  5. (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】

    (3.13)mysql基础深入——mysql 日志分析工具之mysqlsla 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢查询日志分析工具 ...

  6. (3.11)mysql基础深入——mysql文件分类与配置文件管理

    (3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...

  7. (3.16)mysql基础深入——mysql字符集

    (3.16)mysql基础深入——mysql字符集 关键字:mysql字符集,mysql编码 目录 1.概念 2.常用的字符编码 3.查看mysql字符集 [3.1]查看服务器支持的字符集 [3.2] ...

  8. (3.15)mysql基础深入——mysql默认数据库/系统数据库

    (3.15)mysql基础深入——mysql默认数据库 关键词:Mysql默认数据库,mysql系统数据库 系统数据库的组成 一共4个 [1]information_schema(可以理解成字典表) ...

  9. (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析

    (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...

  10. (3.2)mysql基础深入——mysql源码阅读工具安装与应用

    (3.2)mysql基础深入——mysql源码阅读工具安装与应用 关键字:mysql源码阅读工具 工具列举:一般多用[1][2][3]吧 [1]source insight [2]写字板/记事本 UE ...

随机推荐

  1. SpringBoot +Vue 前后端分离实例

    今天下了Vue,想试一试前后端分离的实现,没想到坑还不少,这里就记录一下我遇到的坑和我的代码: 一.Vue的下载安装:从网上找就好了,没什么问题,除了下载以后,要把镜像库改成淘宝的,要不然太慢了. 二 ...

  2. 走进WebApiClientCore的设计

    WebApiClient WebApiClient是NCC开源社区的一个项目,是目前微服务里http接口调用的一把锋利尖刀,项目早期设计与开发的时候,是基于.netframework的,然后慢慢加入n ...

  3. 弹性式数据集RDD

    弹性式数据集RDD ​ 一.RDD简介二.创建RDD        2.1 由现有集合创建        2.2 引用外部存储系统中的数据集        2.3 textFile & who ...

  4. java新学者(二)

    一.构造方法的特点 创建新的对象 A a =new A (); 二.抽象类和抽象方法的特点是什么? .抽象类使用abstract修饰: .抽象类不能实例化,即不能使用new关键字来实例化对象: .含有 ...

  5. mysql小白系列_01 原理

    1.什么是MVCC?有什么作用? Multi-Version Concurrency Conrol 多版本并发控为解决数据库并发读写可能会出现不一致数据的情况,需要实现数据库的并发访问控制,写时复制产 ...

  6. MYSQL 中binlog 参数的记录

    http://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html binlog_cache_size Command ...

  7. python 比较常见的工具方法

    下面是一些工作过程中比较常见的工具方法,但不代表最终答案.希望能对你有所帮助,如果您有更好更多的方法工具,欢迎推荐! 1. 按行读取带json字符串的文件 # -*- coding:utf-8 -*- ...

  8. pyinstaller打包pyqt5,从入坑到填坑,详解

    以上省略pyinstaller安装步骤,直入主题.先分享我的心路历程. 1.pyinstaller -F -i 1.ico UI_Main.py (先在CMD中 cd到 py文件对应的路径) 第一步打 ...

  9. [Firefox附加组件]0002.添加菜单项

    Add-onSDK 还不能为火狐浏览器提供一个API添加新的菜单项.但它是可扩展的设计,所以任何人都可以建立和发布模块,使用插件开发者.大牛埃里克沃尔德写的MenuItems模块,能够使我们很方便的添 ...

  10. This关键字练习

    Account: package com.aff.ex; public class Account { private int id;// 账号 private double balance;// 余 ...