Mysql缓存调优的基本知识(附Demo)

目录

  • 前言
  • 1. 配置
  • 2. 缓存
  • 3. 策略

前言

基本的知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. Mysql优化高级篇(全)
  3. Mysql底层原理详细剖析+常见面试题(全)

MySQL的缓存调优涉及多个方面,包括查询缓存、InnoDB缓冲池、表缓存等

  1. 查询缓存(Query Cache)
    查询缓存是MySQL中缓存查询结果的机制,当相同的查询再次执行时,可以直接从缓存中获取结果,而无需重新解析和执行查询

  2. InnoDB缓冲池(InnoDB Buffer Pool)
    InnoDB缓冲池是InnoDB存储引擎中用来缓存数据和索引的主要内存区域
    优化缓冲池可以显著提高InnoDB表的性能

  3. 表缓存(Table Cache)
    表缓存用于缓存表的元数据和表文件的文件描述符,减少打开和关闭表的开销

1. 配置

一、查询缓存配置:

在my.cnf或my.ini配置文件中进行配置:

[mysqld]
query_cache_type = 1  # 0表示关闭,1表示开启,2表示按需开启
query_cache_size = 64M  # 缓存大小
query_cache_limit = 1M  # 单个查询缓存的最大大小

二、InnoDB缓冲池配置:

[mysqld]
innodb_buffer_pool_size = 1G  # 缓冲池大小,建议设置为物理内存的50%到75%
innodb_buffer_pool_instances = 8  # 缓冲池实例数,适用于多核CPU
innodb_log_buffer_size = 16M  # 日志缓冲区大小

三、表缓存配置:

[mysqld]
table_open_cache = 2000  # 打开表缓存大小

附出博主的配置:

port = 3306  # MySQL服务器的端口
socket = /tmp/mysql.sock  # MySQL服务器的Unix socket文件路径
innodb_force_recovery = 1  # 启用InnoDB恢复模式,数值范围为0-6,1表示最轻微的恢复; Here follows entries for some specific programs
; 下面是一些特定程序的配置条目; The MySQL server
[wampmysqld64]
;skip-grant-tables  # (已注释)跳过权限表的加载,通常用于忘记密码的恢复
port = 3306  # MySQL服务器的端口
socket = /tmp/mysql.sock  # MySQL服务器的Unix socket文件路径
key_buffer_size = 256M  # 用于MyISAM表索引的缓存大小
max_allowed_packet = 1M  # 单个查询允许的最大数据包大小;Added to reduce memory used (minimum is 400)
table_definition_cache = 600  # 表定义缓存的数量,增大可以减少表打开的频率sort_buffer_size = 2M  # 每个连接的排序缓存大小
net_buffer_length = 8K  # 网络缓存初始大小
read_buffer_size = 2M  # MyISAM表扫描的读取缓存大小
read_rnd_buffer_size = 2M  # MyISAM表随机读取的缓存大小
myisam_sort_buffer_size = 64M  # MyISAM表重建索引的缓存大小
basedir="c:/wamp64/bin/mysql/mysql5.7.21"  # MySQL安装的基础路径
log-error="c:/wamp64/logs/mysql.log"  # 错误日志文件路径
datadir="c:/wamp64/bin/mysql/mysql5.7.21/data"  # 数据文件路径lc-messages-dir="c:/wamp64/bin/mysql/mysql5.7.21/share"  # 本地化消息文件目录
lc-messages=en_US  # 本地化消息语言secure_file_priv="c:/wamp64/tmp"  # 限制LOAD DATA, SELECT ... INTO OUTFILE, and LOAD_FILE()的文件操作路径
skip-ssl  # 跳过SSL支持explicit_defaults_for_timestamp=true  # 在没有提供默认值的情况下,明确的默认为TIMESTAMP类型字段赋值; Set the SQL mode to strict
;sql-mode=""  # (已注释)默认SQL模式为空
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"  # 设置SQL模式skip-federated  # 跳过Federated存储引擎的支持server-id = 1  # 服务器ID,用于复制skip-slave-start  # 跳过从服务器启动时自动启动复制线程early-plugin-load=""  # 提前加载的插件列表;innodb_data_home_dir = C:/mysql/data/  # (已注释)InnoDB数据文件的主目录
innodb_data_file_path = ibdata1:12M:autoextend  # InnoDB数据文件路径及大小设置,自动扩展
;innodb_log_group_home_dir = C:/mysql/data/  # (已注释)InnoDB日志文件的主目录
;innodb_log_arch_dir = C:/mysql/data/  # (已注释)InnoDB日志归档目录
; You can set .._buffer_pool_size up to 50 - 80 %
; of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M  # InnoDB缓冲池大小,建议设置为物理内存的50%到80%
; Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 256M  # InnoDB日志文件大小,建议设置为缓冲池大小的25%
innodb_log_buffer_size = 8M  # InnoDB日志缓冲区大小
innodb_thread_concurrency = 16  # InnoDB线程并发数
innodb_flush_log_at_trx_commit = 2  # InnoDB日志刷新策略,2表示每秒刷新一次日志
innodb_lock_wait_timeout = 50  # InnoDB锁等待超时时间
innodb_flush_method=normal  # InnoDB刷盘方法
innodb_use_native_aio = true  # 启用本地异步I/O[mysqldump]
quick  # 启用快速导出模式
max_allowed_packet = 16M  # mysqldump的最大数据包大小[mysql]
no-auto-rehash  # 禁用自动补全功能
; Remove the next comment character if you are not familiar with SQL
;safe-updates  # (已注释)启用安全更新模式[isamchk]
key_buffer_size = 20M  # 用于ISAM表检查和修复的键缓冲区大小
sort_buffer_size = 20M  # 用于ISAM表检查和修复的排序缓冲区大小
read_buffer_size = 2M  # 用于ISAM表检查和修复的读取缓冲区大小
write_buffer_size = 2M  # 用于ISAM表检查和修复的写入缓冲区大小[myisamchk]
key_buffer_size = 20M  # 用于MyISAM表检查和修复的键缓冲区大小
sort_buffer_size_size = 20M  # (注意错字)用于MyISAM表检查和修复的排序缓冲区大小
read_buffer_size = 2M  # 用于MyISAM表检查和修复的读取缓冲区大小
write_buffer_size = 2M  # 用于MyISAM表检查和修复的写入缓冲区大小[mysqlhotcopy]
interactive-timeout  # 启用交互超时[mysqld]
port = 3306  # MySQL服务器的端口

配置文件包括了MySQL服务器的基本配置、内存调优参数、日志文件位置、InnoDB存储引擎设置以及其他特定工具(如mysqldump, mysql, isamchk, myisamchk, mysqlhotcopy)的配置

2. 缓存

查询缓存的基本命令如下:

通过正确配置和调优MySQL的缓存,可以显著提升数据库的性能和响应速度
定期监控和调整缓存配置也是确保数据库性能的关键

# 查询缓存相关命令
SHOW VARIABLES LIKE 'query_cache%';  # 查看查询缓存相关变量
SHOW STATUS LIKE 'Qcache%';  # 查看查询缓存状态# InnoDB缓冲池相关命令
SHOW ENGINE INNODB STATUS;  # 查看InnoDB引擎状态,包括缓冲池信息
SHOW VARIABLES LIKE 'innodb_buffer_pool%';  # 查看InnoDB缓冲池相关变量
SHOW STATUS LIKE 'Innodb_buffer_pool%';  # 查看InnoDB缓冲池状态# 表缓存相关命令
SHOW VARIABLES LIKE 'table_open_cache';  # 查看表缓存配置
SHOW STATUS LIKE 'Open_tables';  # 查看当前打开的表数
SHOW STATUS LIKE 'Opened_tables';  # 查看自服务器启动以来总共打开的表数

截图如下:

在这里插入图片描述

相应的清空命令如下:

  1. 清空查询缓存RESET QUERY CACHE;

  2. 清空InnoDB缓冲池
    InnoDB缓冲池通常不需要手动清空,重启MySQL服务会自动清空缓冲池

  3. 清空表缓存FLUSH TABLES;

3. 策略

和上面的缓存有些关联,不过按照逻辑,还是照样扯一下

一、使用SQL_NO_CACHE关键字避免特定查询使用缓存

SELECT SQL_NO_CACHE * FROM my_table WHERE column = 'value';

二、使用SQL_CACHE关键字强制特定查询使用缓存

SELECT SQL_CACHE * FROM my_table WHERE column = 'value';

三、定期清理查询缓存以防止碎片化
定期清理查询缓存可以防止缓存碎片化,保持查询缓存的效率:RESET QUERY CACHE;

四、查询缓存状态和配置命令
使用以下命令查看查询缓存的状态和配置:

SHOW VARIABLES LIKE 'query_cache%';  # 查看查询缓存相关变量
SHOW STATUS LIKE 'Qcache%';  # 查看查询缓存状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3245522.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

视图库对接系列(GA-T 1400)十九、视图库对接系列(级联)注册

背景 在上一章视图库对接系列(GA-T 1400)十八、视图库对接系列(级联)代码生成中我们已经把代码生成了,那怎么实现级联? 我们可以抓包看设备是怎么注册到我们平台的, 那我们就怎么实现就可以了。 实现 先看设备注册到我们服务端的包 步骤 注册我们可以参考视图库对接系列(…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法:直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣(LeetCode) 题目描述 算法原理 提示:最优解和贪心解唯一可能不同…

学习大数据DAY17 PLSQL基础语法6和Git的基本操作

目录 包 存储过程调试功能 作业 阶段复习作业 Git课程目录 什么是版本控制 没有版本控制的缺点 常见的版本工具 版本控制分类 1. 本地版本控制 2. 集中版本控制 3. 分布式版本控制 Git与SVN主要区别 Git软件安装及配置 Windows系统安装Git 安装Tortoise Git(乌龟…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【获取密钥属性(C/C++)】

获取密钥属性(C/C) HUKS提供了接口供业务获取指定密钥的相关属性。在获取指定密钥属性前,需要确保已在HUKS中生成或导入持久化存储的密钥。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 构造对应参数。 keyAlias&…

生成树(STP)协议

一、生成树的技术背景 1、交换机单线路上链,存在单点故障,上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,网络将面临断网。 总结:以下网络不够健壮,不具备冗余性。 2、因此引入如下网络拓扑结构: 上述冗余拓扑能够解决单点故障问题,但同时冗拓扑也带来了…

【PB案例学习笔记】-32制作一个简单记事本程序

大家好,我是晓凡。 写在前面 这是PB案例学习笔记系列文章的第32篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码…

【信息系统项目管理师】高项论文通用加分素材

文章目录 输入I工具与技术TT输出O 写一些增加项目真实性的问题,如变更、进度(范围蔓延、进度延后怎么处理、好几个项目并行资源协调)||成本、沟通(跨部门沟通) 在保障真实性的同时选的项目紧跟潮流 要能看出实际经验 …

GB35114国密算法-GMSSL

C有个三方库-GMSSL是可以进行GB35114所需要的SM2、SM3、SM4等加解密算法的,但是使用国密算法是需要申请报备的 GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流…

国产精品ORM框架-SqlSugar详解 进阶功能 集成整合 脚手架应用 附源码 云草桑 专题二

国产精品ORM框架-SqlSugar详解 SqlSugar初识 专题一-CSDN博客 sqlsugar 官网-CSDN博客 4、进阶功能 5、集成整合 6、脚手架应用 4、进阶功能 4.1、生命周期 Queryable 什么时候操作库 Queryable是一个引用类型 Queryable拷贝机制 {ISugarQueryable<Student> quer…

十九、【文本编辑器(五)】排版功能

目录 一、搭建框架 二、实现段落对齐 三、实现文本排序 一、搭建框架 (1) 在imgprocessor.h文件中添加private变量&#xff1a; QLabel *listLabel; //排序设置项QComboBox *listComboBox;QActionGroup *actGrp;QAction *leftAction;QAction *…

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

PDF Reader 编辑阅读软件 for Mac v4.0.4(办公必备,小白简单易上手)

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件 安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软…

redis其他类型和配置文件

很多博客只讲了五大基本类型&#xff0c;确实&#xff0c;是最常用的&#xff0c;而且百分之九十的程序员对于Redis只限于了解String这种最常用的。但是我个人认为&#xff0c;既然Redis官方提供了其他的数据类型&#xff0c;肯定是有相应的考量的&#xff0c;在某些特殊的业务…

51单片机嵌入式开发:11、 STC89C52RC 实现一个滑动的led点阵程序

STC89C52RC 实现一个滑动的led点阵程序 1 概述2 LED点阵介绍2.1 LED概述2.2 LED点阵注意事项 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 扩展74HC595&#xff08;后续专题开展&#xff09;6 总结 第十一节 1…

MySQL—— if/cast/case.... end/md5 函数

目录 1. if 使用 2. if 嵌套 ​3. case ... end 4. 类型转换 cast&#xff08;&#xff09; 5. 加密函数 md5&#xff08;&#xff09; 1. if 使用 将姓名为smith的员工工资上调10%&#xff1b; 2. if 嵌套 如果岗位是manager&#xff0c;工资上调10%&#xff0c;如果岗位是s…

camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程

有时我们录制的屏幕内容&#xff0c;并不一定全部需要。那么&#xff0c;屏幕录制的视频怎么裁剪上下不要的部分&#xff1f;可以使用视频剪辑软件&#xff0c;或者微课制作工具来进行裁剪。屏幕录制的视频怎么旋转&#xff1f;录制视频的旋转也是一样的&#xff0c;均在编辑步…

10.1 标注、注记图层和注记整体说明

文章目录 前言标注、注记图层和注记QGis中的标注QGis中的注释(Annotation)图层QGis中的注记 总结 前言 介绍标注、注记图层和注记说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 标注、注记图层和注记 有时地图需要使用一些文字信息说明其中的地理要素或其…

Redis系列命令更新--Redis列表命令

Redis列表 1、Redis Blpop命令&#xff1a; &#xff08;1&#xff09;说明&#xff1a;Redis Blpop命令移出并获取列表的第一个元素&#xff1b;如果列表没有元素会阻塞列表直到等到超时或发现可弹出元素为止 &#xff08;2&#xff09;语法&#xff1a;redis 127.0.0.1:63…

IDEA快速生成项目树形结构图

下图用的IDEA工具&#xff0c;但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下&#xff0c;进入cmd输入如下指令&#xff1a; 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释

程控电阻器

程控电阻器 由于要测试电阻型温度传感器&#xff0c;一个电阻箱又很贵&#xff0c;就想做一款 程控电阻器 来满足。 设计满足300Ω到400kΩ可调电阻。 设计思路 选择数字电位器去控制电阻输出&#xff0c;最好是精度高&#xff0c;范围大的数字电位器。经过寻找后&#xff0c;发…