配置文件设置缓存

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. JavaScript小面试~宏任务和微任务

    首先,我们要知道JavaScript是单线程调用,在程序启动的时候,会把不同的代码段分派到不同的调用栈,同步任务在同步栈中直接执行,宏任务分派到宏任务栈,微任务会分配到微任务栈,分配好之后,调用栈会被 ...

  2. Python 基于Python生成短8位唯一id解决方案

    基于Python生成短8位唯一id解决方案 by:授客 QQ:1033553122 测试环境: Win10 Python 3.5.4   实现思路 利用62个可打印字符,通过随机生成32位UUID,由 ...

  3. 1分钟了解HashSet的使用

    前言:刷leetcode的时候体验到hashset有多厉害了,用了他剪枝之后直接不爆超时了.速度大大滴快 使用方法 1.创建set对象Set<Integer>set=new HashSet ...

  4. python与c/java的异

    1.注释 #为单行注释 """ 这里是多行注释 """ ''' 这个也可以是多行注释 ''' 2.赋值 在python中赋值不需要特定变量的 ...

  5. BI 工具如何助力市政设计公司实现数字化转型?

    一.前言 近年来,国家出台多个政策文件来鼓励和发展数字化和智能化,如<十四五规划>提出要推进产业数字化转型.<交通强国建设纲要>提出要大力发展智慧交通.上海市发布的<关于 ...

  6. EDI企业订单报文系统——冷链物流管理系统——低代码的应用

    参考: 驳"低代码开发取代程序员"论 为什么专业开发者也需要低代码? =========================================== 推荐视频: https ...

  7. 哈希基础知识学习-python版

    哈希 哈希表 根据key直接进行访问的无序数据结构,复杂度为O(1) 哈希表的实现---字典 初始化 d1 = dict() 查找 #使用中括号[]进行查找,括号内为特定的键, 键-值 dic = { ...

  8. 社区6月月报 | Apache SeaTunnel重要更新与优化记录

    各位热爱Apache SeaTunnel的小伙伴们,社区6月份月报来啦!这里将记录Apache SeaTunnel社区每月的重要更新,欢迎关注. 月度Merge Stars 感谢以下小伙伴上个月为Ap ...

  9. SMU Summer 2024 Contest Round 2

    SMU Summer 2024 Contest Round 2 Sierpinski carpet 题意 给一个整数 n ,输出对应的 \(3^n\times 3^n\) 的矩阵. 思路 \(n = ...

  10. 代码随想录Day15

    110.平衡二叉树 (优先掌握递归) 给定一个二叉树,判断它是否是 平衡二叉树 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1. 示例 1: 输入:root = [3,9,20,null, ...