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

news2024/12/23 23:11:14

目录

  • 前言
  • 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://www.coloradmin.cn/o/1931112.html

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

相关文章

【网络安全的神秘世界】HackBar绕过许可证

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 🍄问题描述 用Firefox浏览器安装hackbar插件后,按F12键,发现如下提示:无法使…

防火墙的带宽管理

一、实验拓扑 目录 一、实验拓扑 二、实验要求 三、实验步骤 3.1将防火墙组网改成双机热备的组网形式,做负载分担模式,游客区和DMZ区走FW3,生产区和办公区的流量走FW1 3.1.1心跳线设置 3.2启用双机热备,并配置VRRP组 3.2.1…

MySQL常用命令的实战应用

MySQL常用命令全攻略:从入门到精通的实用指南 在数字化时代的浪潮中,MySQL作为关系型数据库管理系统的佼佼者,以其稳定性和高效性赢得了全球用户的青睐。无论是新手还是资深开发者,掌握MySQL的常用命令都是提升数据库管理能力的基…

内行人才知道的白酒术语

😜宝子们,今天来给大家分享一些只有内行人懂的白酒术语,让你在酒桌上也能显得很专业!💪 ⬆️基酒术语解释:所谓基酒就是最基础的酒,也叫原浆酒,是指成酒后不经过勾调的酒液。基酒度…

数据库内核研发学习之路(三)创建postgres内置函数

本章之前已经讲明白了我们的postgres如何进行编译安装,这是很重要的一步,接下来就是学会对postgres进行小的改动,然后保证依然能够顺利编译安装运行! 本章续讲内容如何创建一个内置函数。 1、内置函数和用户自定义函数的区别 熟…

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

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

[Vulnhub] devt-improved slog_users+vim权限提升+nano权限提升+passwd权限提升+Lxc逃逸权限提升

信息收集 IP AddressOpening Ports192.168.101.149TCP:22,113,139,445,8080 $ nmap -p- 192.168.101.149 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | …

Python基础语法篇(上)

Python基础语法&#xff08;上&#xff09; 一、基知二、基本数据类型&#xff08;一&#xff09;标准数据类型&#xff08;二&#xff09;数据类型转换 三、字符串基本操作&#xff08;一&#xff09;字符串的索引和切片&#xff08;二&#xff09;字符串的拼接 三、运算符四、…

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篇:主从复制

概述 话不多说&#xff0c;直接上概念&#xff1a; DDL&#xff08;Data Definition Language&#xff09;语句&#xff1a; 数据定义语言&#xff0c;主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。常用的语句关键字有 CREATE、DROP、ALTER 等。 DML&#xff…

Redis实战—附近商铺、用户签到、UV统计

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P88 - P95 目录 附近商铺 数据导入 功能实现 用户签到 签到功能 连续签到统计 UV统计 附近商铺 利用Redis中的GEO数据结构实现附近商铺功能&#xff0c;常见命令如下图所示。…

逻辑漏洞-支付漏洞

【实验目的】 通过本次实验&#xff0c;掌握最基础的支付漏洞 【实验环境】 win7操作机&#xff1a;10.0.0.2 centos7靶机&#xff1a;10.0.0.3 【实验步骤】 1. 启动实验环境 点击“启动场景”按钮&#xff0c;成功启动后&#xff0c;点击操作机按钮进入操作界面。 打开浏…

景区客流统计系统提升服务精准度

在当今旅游业蓬勃发展的时代&#xff0c;景区面临着越来越多的挑战和机遇。如何在保障游客良好体验的同时&#xff0c;实现景区的高效管理和可持续发展&#xff0c;成为了摆在景区管理者面前的重要课题。景区客流统计系统的出现&#xff0c;为解决这一问题提供了有力的支持&…

如何通过成熟的外发平台,实现文档安全外发管理?

文档安全外发管理是企业信息安全管理的重要组成部分&#xff0c;它涉及到企业向外发送的文件&#xff0c;需要进行严格的控制和管理&#xff0c;防止敏感或机密信息的泄露。以下是一些关键考虑因素&#xff1a; 文件外发的挑战&#xff1a;企业在文件外发时面临的主要挑战包括…

Python数据分析-植物生长数据分析(机器学习模型和神经网络模型)

一、研究背景 植物生长受多种环境因素的影响&#xff0c;包括土壤类型、日照时间、浇水频率、肥料类型、温度和湿度等。这些因素不仅影响植物的生长速度和健康状况&#xff0c;还对植物在不同生长阶段的表现有显著影响。随着气候变化和环境污染问题的加剧&#xff0c;研究如何…

【NLP实战】基于TextCNN的新闻文本分类

TextCNN文本分类在pytorch中的实现 基于TextCNN和transformers.BertTokenizer的新闻文本分类实现&#xff0c;包括训练、预测、数据加载和准确率评估。 目录 项目代码TextCNN网络结构相关模型仓库准备工作项目调参预测与评估 1.项目代码 https://github.com/NeoTse0622/Te…

数电基础 - 硬件描述语言

目录 一. 简介 二. Verilog简介和基本程序结构 三. 应用场景 四. Verilog的学习方法 五.调式方法 一. 简介 硬件描述语言&#xff08;Hardware Description Language&#xff0c;HDL&#xff09;是用于描述数字电路和系统的形式化语言。 常见的硬件描述语言包括 VHDL&…

如何落地实际场景,解决跨境传输共性需求?免费白皮书可下载

在全球化的背景下&#xff0c;海外市场对于数据驱动的产品和服务的需求不断增加&#xff0c;各行业数据跨境传输也日趋频繁&#xff0c;在这种前景下&#xff0c;越来越多的企业寻求更深度的跨国业务及合作&#xff0c;因此&#xff0c;企业数据跨境流动也成为了势不可挡的趋势…

LabVIEW异步和同步通信详细分析及比较

1. 基本原理 异步通信&#xff1a; 原理&#xff1a;异步通信&#xff08;Asynchronous Communication&#xff09;是一种数据传输方式&#xff0c;其中数据发送和接收操作在独立的时间进行&#xff0c;不需要在特定时刻对齐。发送方在任何时刻可以发送数据&#xff0c;而接收…

Internet 控制报文协议 —— ICMPv4 和 ICMPv6 详解

ICMP 是一种面向无连接的协议&#xff0c;负责传递可能需要注意的差错和控制报文&#xff0c;差错指示通信网络是否存在错误 (如目的主机无法到达、IP 路由器无法正常传输数据包等。注意&#xff0c;路由器缓冲区溢出导致的丢包不包括在 ICMP 响应范围内&#xff0c;在 TCP 负责…