配置文件设置缓存

query_cache_size = 20M  #缓存大小
query_cache_type = ON #开启缓存
table_cache=256 #用于限制缓存表的最大数目,如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存

查询缓存配置
have_query_cache服务器系统变量指示查询缓存是否可用:YES可用,NO不可用

mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+

要设置查询缓存的大小,请设置 query_cache_size系统变量。将其设置为0将禁用查询缓存。query_cache_type=0禁用查询缓存

设置query_cache_size 为非零值时,请记住查询缓存需要最小大小约为40KB才能分配其结构。(确切的大小取决于系统体系结构。)如果将该值设置得太小,则会收到警告,如以下示例所示:

mysql> SET GLOBAL query_cache_size = 40000;
Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Warning
Code: 1282
Message: Query cache failed to set size 39936;
new query cache size is 0 mysql> SET GLOBAL query_cache_size = 41984;
Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'query_cache_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| query_cache_size | 41984 |
+------------------+-------+

为了使查询缓存实际上能够保存任何查询结果,必须将其大小设置为更大:

mysql> SET GLOBAL query_cache_size = 1000000;
Query OK, 0 rows affected (0.04 sec) mysql> SHOW VARIABLES LIKE 'query_cache_size';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| query_cache_size | 999424 |
+------------------+--------+
1 row in set (0.00 sec)

该query_cache_size值与最接近的1024字节块对齐。因此,报告的值可能与您分配的值不同。

如果查询缓存大小大于0,则 query_cache_type变量会影响其工作方式。可以将此变量设置为以下值:

0或OFF 禁用缓存。

1或ON 启用缓存,但以开头的语句除外 SELECT SQL_NO_CACHE。

2或 DEMAND导致仅缓存以开头的语句SELECT SQL_CACHE。

如果query_cache_size为0,则还应该将query_cache_type变量设置 为0。在这种情况下,服务器根本不会获取查询缓存互斥量,这意味着无法在运行时启用查询缓存,并且减少了查询执行的开销。

设置该GLOBAL query_cache_type值可确定更改后连接的所有客户端的查询缓存行为。各个客户端可以通过设置SESSION query_cache_type值来控制自己连接的缓存行为 。例如,客户端可以禁止对自己的查询使用查询缓存,如下所示:

mysql> SET SESSION query_cache_type = OFF;

如果query_cache_type 在服务器启动时(而不是在运行时使用 SET 语句)进行设置,则仅允许数字值。

要控制可缓存的单个查询结果的最大大小,请设置 query_cache_limit系统变量。默认值为1MB。

注意不要将缓存的大小设置得太大。由于在更新过程中需要线程锁定高速缓存,因此您可能会看到高速缓存非常大的锁定争用问题。

注意
SET 通过使用 命令行或配置文件中的选项,
可以使用语句设置 在运行时为查询缓存指定的最大大小 。
--maximum-query_cache_size=32M
也可以直接修改my.cnf文件 ,在msqld下直接添加 query_cache_size = 32M

当要缓存查询时,其结果(发送到客户端的数据)将在结果检索期间存储在查询缓存中。因此,通常不会大批量处理数据。查询高速缓存分配块以按需存储此数据,因此当一个块被填充时,将分配一个新块。由于内存分配操作成本高昂(按时间排列),因此查询缓存将分配具有query_cache_min_res_unit 系统变量给定的最小大小的块 。执行查询时,将最后一个结果块修剪为实际数据大小,以便释放未使用的内存。根据服务器执行的查询类型,您可能会发现调整以下值会有所帮助 query_cache_min_res_unit:

默认值为 query_cache_min_res_unit 4KB。对于大多数情况,这应该足够了。

如果您有很多查询但结果很少,则默认的块大小可能会导致内存碎片,这由大量的空闲块指示。由于内存不足,碎片可能会迫使查询缓存从缓存中修剪(删除)查询。在这种情况下,减小的值 query_cache_min_res_unit。由于修剪而删除的空闲块和查询的数量由Qcache_free_blocks和 Qcache_lowmem_prunes 状态变量的值给出 。

如果大多数查询的结果较大(请检查 Qcache_total_blocks和 Qcache_queries_in_cache 状态变量),则可以通过提高来提高性能 query_cache_min_res_unit。但是,请注意不要使其过大

您可以对查询缓存进行碎片整理,以更好地利用该FLUSH QUERY CACHE语句的内存。该语句不会从缓存中删除任何查询。

该RESET QUERY CACHE语句从查询缓存中删除所有查询结果。该 FLUSH TABLES语句也这样做。

要监视查询缓存性能,请使用 SHOW STATUS来查看缓存状态变量:

mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_free_blocks | 36 | #查询缓存中的可用内存块数
| Qcache_free_memory | 138488 | #查询缓存的可用内存量
| Qcache_hits | 79570 | #查询缓存命中数
| Qcache_inserts | 27087 | #添加到查询缓存中的查询数
| Qcache_lowmem_prunes | 3114 | #由于内存不足而从查询缓存中删除的查询数
| Qcache_not_cached | 22989 | #非缓存查询的数量(不可缓存或由于query_cache_type 设置而未被缓存)。
| Qcache_queries_in_cache | 415 | #在查询缓存中注册的查询数
| Qcache_total_blocks | 912 | #查询缓存中的块总数。
+-------------------------+--------+

查询缓存使用可变长度的块,因此 Qcache_total_blocks并 Qcache_free_blocks可能指示查询缓存内存碎片。之后 FLUSH QUERY CACHE,仅剩下一个空闲块。

mysql> flush query cache;
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables;   #清空当前所有缓存的表
Query OK, 0 rows affected (0.00 sec)
mysql> reset query cache; #清理内存中的碎片
Query OK, 0 rows affected (0.00 sec)

每个缓存的查询至少需要两个块(一个用于查询文本,一个或多个用于查询结果)。同样,查询使用的每个表都需要一个块。但是,如果两个或多个查询使用同一张表,则只需要分配一个表块。

Qcache_lowmem_prunesstatus变量 提供的信息 可以帮助您调整查询缓存的大小。它计算从缓存中删除的查询数,以释放内存以缓存新查询。查询缓存使用最近最少使用(LRU)策略来决定从缓存中删除哪些查询。

MySQL配置缓存查询和维护的更多相关文章

  1. Mysql 配置慢查询日志(SlowQueryLog)以及使用日志分析工具

    [ 查看系统关于慢查询的设置 ] mysql> show variables like '%slow%'; +---------------------------+-------------- ...

  2. SpringMVC+Mybatis+MySQL配置Redis缓存

    SpringMVC+Mybatis+MySQL配置Redis缓存 1.准备环境: SpringMVC:spring-framework-4.3.5.RELEASE-dist Mybatis:3.4.2 ...

  3. MySQL慢日志查询全解析:从参数、配置到分析工具【转】

    转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbap ...

  4. MySql 缓存查询原理与缓存监控 和 索引监控

    MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...

  5. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  6. MySql配置参数很全的Mysql配置参数说明

    MySql配置参数 很全的Mysql配置参数说明 1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...

  7. MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询

    本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...

  8. MySQL慢日志查询分析方法与工具

    MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...

  9. MySQL配置

    一.登录MySQL 要登录到MySQL只需要使用如下命令. mysql -h localhost -u root -p localhost:IP地址: root:用户名: database:数据库名( ...

  10. mysql笔记03 查询性能优化

    查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...

随机推荐

  1. iOS开发基础142-广告归因

    IDFA IDFA是苹果为iOS设备提供的一个唯一标识符,专门用于广告跟踪和相关的营销用途.与之对应的,在Android平台的是谷歌广告ID(Google Advertising ID). IDFA的 ...

  2. win10安装和使用wireshark

    win10安装和使用wiresharkhttps://blog.csdn.net/qq_34732729/article/details/105126146https://blog.csdn.net/ ...

  3. Java--匿名类(学习笔记)

    匿名类的特点:(1) 匿名类是final类:(3) 在匿名类中可以定义实例变量和若干个实例初始化代码块和新的实例方法.Java虚拟机首先调用父类的构造方法,然后按照实例变量的和实例初始化代码块定义的先 ...

  4. 【Spring-Security】Re09 CSFR处理

    一.CSRF: CSRF 全称 Cross Site Request Forgery 跨站请求伪造 又称为OneClick Attack & SessionRiding 是非法请求访问,通过伪 ...

  5. pve 安装配置问题集锦

    官网:https://www.proxmox.com/en/ 下载:https://www.proxmox.com/en/downloads 安装:https://pve.proxmox.com/wi ...

  6. 位段 -- 内存布局详解C语言

    目录 位段的介绍 位段使用示例: 位段的内存分配 Example 内存分配解析: ## 位段 位段的介绍 位段(二进制位):就是按位存储 位段(bit-field)是C语言中的一种特殊数据类型,它允许 ...

  7. Jax计算框架的MPI通讯的扩展库 —— mpi4jax

    地址: https://github.com/mpi4jax/mpi4jax PS. 关于这个library的性能表现并不是很清楚,没有亲自手动安装并测试过.这里只作为链接收藏之用,毕竟这个属于比较小 ...

  8. Git的GPG签名 —— Tag签名 Verified验证,防伪造的gitee/github commit验证

    相关资料: 如何使用git通过ssh协议拉取gitee上的项目代码--如何正确的免密使用git 不论是gitee还是GitHub都有两种公钥设置,一种是ssh公钥,另一种则是GPG公钥.ssh公钥是为 ...

  9. AI实践者师生夏令营讲座视频:南京大学Lamda实验室(周志华 团队)讲座视频 —— 强化学习的局限性与展望

    视频地址: 周志华团队与Intel团队的讲座视频--强化学习的局限性与未来展望 视频链接地址: https://bizwebcast.smarket.com.cn/b975d6d9969a42cba9 ...

  10. 强化学习:AC算法中为什么不使用Q函数来表示优势函数

    强化学习中的策略梯度法(PG)不直接使用Q函数作为值函数来进行计算已经在Sutton的PG公式证明中提出,主要作用就是减少方差,因此使用优势函数进行计算.作为PG算法类中最常见的AC类算法有着较多的使 ...