MySQL配置缓存查询和维护
配置文件设置缓存
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配置缓存查询和维护的更多相关文章
- Mysql 配置慢查询日志(SlowQueryLog)以及使用日志分析工具
[ 查看系统关于慢查询的设置 ] mysql> show variables like '%slow%'; +---------------------------+-------------- ...
- SpringMVC+Mybatis+MySQL配置Redis缓存
SpringMVC+Mybatis+MySQL配置Redis缓存 1.准备环境: SpringMVC:spring-framework-4.3.5.RELEASE-dist Mybatis:3.4.2 ...
- MySQL慢日志查询全解析:从参数、配置到分析工具【转】
转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbap ...
- MySql 缓存查询原理与缓存监控 和 索引监控
MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...
- centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课
centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课 mysq ...
- MySql配置参数很全的Mysql配置参数说明
MySql配置参数 很全的Mysql配置参数说明 1. back_log 指定MySQL可能的连接数量.当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很 ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- MySQL慢日志查询分析方法与工具
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
- MySQL配置
一.登录MySQL 要登录到MySQL只需要使用如下命令. mysql -h localhost -u root -p localhost:IP地址: root:用户名: database:数据库名( ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
随机推荐
- char字符_C
字符的表示 字符类型由单引号' '包围,字符串由双引号" "包围. //正确的写法 char a = '1'; char b = '$'; char c = 'X'; char ...
- 从DDPM到DDIM (一) 极大似然估计与证据下界
从DDPM到DDIM (一) 极大似然估计与证据下界 现在网络上关于DDPM和DDIM的讲解有很多,但无论什么样的讲解,都不如自己推到一遍来的痛快.笔者希望就这篇文章,从头到尾对扩散模型做一次完整 ...
- 如何对jar包修改并重新发布在本机
本人苦于jieba不能如何识别伊利丹·怒风,召唤者坎西恩这种名字,对jieba-analysis进行了解包和打包 步骤1:找到对应jar 步骤2:在cmd中输入jar -xvf xxx.jar解压包, ...
- 常用的adb命令(重要)
常用的adb命令(重要)
- 【Vue2】Component 组件
Main.JS入口函数,Vue的用法 //导入vue模块,得到Vue构造函数 import Vue from 'vue' // 导入根组件App.vue import App from './App. ...
- blender建模渲染Tips
blender渲染 灯光的三种方式 1,常规灯光:shift+A选择灯光. 2,世界环境光:右侧地球图标调整. 3,物体自发光:把渲染物体变成一个发光体来进行调节灯光. 渲染视窗的调节 ctrl+b裁 ...
- 2022 CCF推荐会议列表(国际会议列表)
2019年版本的CCF推荐会议和期刊: https://www.ccf.org.cn/Academic_Evaluation/By_category/2022-12-02/780280.shtml 2 ...
- Java 大文件IO操作效率对比【我说说 你瞅瞅】
Java 文件IO操作效率对比 注:本文只做时间消耗层面对比,内存占用层面需要特别关注! 1. 参数说明 文件总大小:2,111,993,850 字节(2.11 GB) static String d ...
- 恶补基础知识:Java 栈与队列详解
@ 目录 前言 简介 栈 Java实现栈的示例代码: 栈的主要应用场景包括: 队列 Java实现队列的示例代码: LinkedList中的add方法和offer方法的区别 队列主要应用场景: 总结 前 ...
- SPI转can芯片CSM300详解以及Linux驱动移植调试笔记
一.CSM300概述 CSM300(A)系列是一款可以支持 SPI / UART 接口的CAN模块. 1. 简介 CSM300(A)系列隔离 SPI / UART 转 CAN 模块是集成微处理器. C ...