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%';  # 查看查询缓存状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集群架构-web服务器(接入负载均衡+数据库+会话保持redis)--15454核心配置详解

紧接着前面的集群架构深化—中小型公司(拓展到大型公司业务)–下面图简单回顾一下之前做的及故障核心知识总结(等后期完全整理后,上传资源希望能帮大家) web集群架构-接入负载均衡部署web02服务器等 web集群-搭建web0…

Abaqus基于CT断层扫描的三维重建插件CT2Model 3D

插件介绍 AbyssFish CT2Model 3D V1.0 插件可将采用X射线等方法获取的计算机断层扫描(CT)图像在Abaqus有限元软件内进行三维重建,进而高效获取可供模拟分析的有限元模型。插件可用于医学影像三维重构、混凝土细观三维重建、岩心数字化等领域…

数据结构-C语言-排序(2)

代码位置:test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言: 1.1-排序定义: 排序就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。(注:我们这里的排序采用的都为升序) 1.2-排序分…

2-36 基于matlab的流行学习算法程序

基于matlab的流行学习算法程序。通过GUI的形式将MDS、PCA、ISOMAP、LLE、Hessian LLE、Laplacian、Dissusion MAP、LTSA八种算法。程序以可视化界面进行展示,可直接调用进行分析。多种案例举例说明八种方法优劣,并且可设置自己数据进行分析。程序已调通&…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现:实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

百度人脸识别Windows C++离线sdk C#接入

百度人脸识别Windows C离线sdk C#接入 目录 说明 设计背景 • 场景特点: • 客户特点: • 核心需求: SDK 包结构 效果 代码 说明 自己根据SDK封装了动态库,然后C#调用。 功能接口 设计背景 • 场景特点: -…

【漏洞复现】深信服 行为感知系统 日志中心 c.php 远程命令执行

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

PTA - 嵌套列表求和

使用递归函数对嵌套列表求和 函数接口定义: def sumtree(L) L是输入的嵌套列表。 裁判测试程序样例: /* 请在这里填写答案 */L eval(input()) print(sumtree(L)) # 调用函数 输入样例: 在这里给出一组输入。例如: [1,[2…

PriorityQueue 阅读记录

1、前言 1、优先队列,底层通过数组来构造树(二叉树) 来实现的。 2、默认是最小堆(取出来的是最小值),可以通过传入一个比较器 comparator 来构造一个最大堆。 3、传入的参数不能为空,否则抛出NPE问题。 4、最大堆的…

系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述

系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述 3.1.1 信息系统的定义3.1.1.1 信息系统3.1.1.2 信息化3.1.2 信息系统的发展3.1.2.1 初始阶段3.1.2.2 传播阶段3.1.2.3 控制阶段3.1.2.4 集成阶段3.1.2.5 数据管理阶段3.1.2.6 成熟阶段3.1.3 信息系统的分类3.…

读人工智能全传15意向立场

1. 物理立场 1.1. 可以解释一个实体行为 1.2. 在物理立场中,我们使用自然法则(物理、化学等)来预测系统的行为结果 1.3. 虽然物理立场在解释这种行为的时候非常有效,但无法应用于理解或者预测人类行为 1.3.1. …

六边形动态特效404单页HTML源码

源码介绍 动态悬浮的六边形,旁边404文字以及跳转按钮,整体看着像科技二次元画风,页面简约美观,可以做网站错误页或者丢失页面,将下面的代码放到空白的HTML里面,然后上传到服务器里面,设置好重定向即可 效果预览 完整源码 <!DOCTYPE html> <html><head…

关于springboot的@DS(““)多数据源的注解无法生效的原因

对于com.baomidou.dynamic.datasource.annotation的DS注解&#xff0c;但凡有一个AOP的修改都会影响到多数据源无法生效的问题&#xff0c;本次我是添加了方法上添加了Transactional&#xff0c;例如下图&#xff1a; 在方法上写了这个注解&#xff0c;会影响到DS("db2&qu…

万字长文之分库分表里如何优化分页查询?【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 分页查询】

分库分表的一般做法 一般会使用三种算法&#xff1a; 哈希分库分表&#xff1a;根据分库分表键算出一个哈希值&#xff0c;根据这个哈希值选择一个数据库。最常见的就是数字类型的字段作为分库分表键&#xff0c;然后取余。比如在订单表里&#xff0c;可以按照买家的ID除以8的…

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

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

Web3D:WebGL为什么在渲染性能上输给了WebGPU。

WebGL已经成为了web3D的标配&#xff0c;市面上有N多基于webGL的3D引擎&#xff0c;WebGPU作为挑战者&#xff0c;在渲染性能上确实改过webGL一头&#xff0c;由于起步较晚&#xff0c;想通过这个优势加持&#xff0c;赶上并超越webGL仍需时日。 贝格前端工场为大家分享一下这…

leetcode 1459 矩形面积(postgresql)

需求 表: Points ---------------------- | Column Name | Type | ---------------------- | id | int | | x_value | int | | y_value | int | ---------------------- id 是该表主键 每个点都用二维坐标 (x_value, y_value) 表示 写一个 SQL 语句&#xff0c;报告由表中任…

Redis-基础概念

目录 概念 Redis是什么 Redis 和 MySQL 的区别&#xff1f; Redis单线程有什么极端场景的瓶颈 Redis为什么快? 为什么Redis是单线程? Redis是单线程还是多线程 Redis为什么选择单线程做核心处理 Redis6.0之后引入了多线程&#xff0c;你知道为什么吗? 瓶颈是内存和I…

MySQL-事务、日志

事务 特性 原子性 是指事务开始后&#xff0c;必须成功执行完所有的操作才会结束&#xff0c;否则会回滚到事务刚开始前。 拿转账来说&#xff0c;一个成功的 A向B转账100元的过程 会涉及如下过程&#xff1a; A&#xff1a;从数据库读取A的余额&#xff1b;A的余额-100&am…

Pytorch学习笔记day1—— 安装教程

这里写自定义目录标题 Pytorch安装方式 工作需要&#xff0c;最近开始搞一点AI的事情。但是这个国产的AI框架&#xff0c;实话说对初学者不太友好 https://www.mindspore.cn/ 比如说它不支持win下的CUDA&#xff0c;可是我手里只有3070Ti和4060也不太可能自己去买昇腾就有点绷不…