MySQL 性能优化:真正重要的变量

《云计算》-MySql高级-Mysql性能优化:启用慢查询日志、查看系统变量、状态变量 1 案例1:MySQL性能优化 1.1 问题 练习相关优化选项 启用慢查询日志 查看各种系统变量、状态变量 1.2 步骤 实现此案例需要按照如下步骤进行。 步骤一:mysql性能优化 1)查看服务运行时的参数配置 mysql> show variables\G; ...... *************************** 171. row ********************... 阅读详情

作者:Wayne Leutwyler,Percona 技术客户经理

原文:https://percona.community/blog/2026/02/01/tuning-mysql-for-performance-the-variables-that-actually-matter/,Feb 1, 2026

爱可生开源社区翻译,本文约 1900 字,预计阅读需要 8 分钟。

tuning_mysql_for_performance_hu_f218549d2cbe4535.jpg

有一种只有 DBA 才能体会的无聊。就是盯着运行的服务器,心想:肯定有什么地方可以优化。好消息是:确实有。

本文将详细 介绍几个能提升 MySQL 性能的变量,解释它们的重要性,以及调整这些变量何时能带来性能提升,何时又会悄然降低性能。本文主要针对 InnoDB 存储引擎。

1. innodb_buffer_pool_size

1.1 真正值得关注的指标

在修改这个变量之前,请先查看以下内容:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';

关键字段:

  • Innodb_buffer_pool_reads - 从磁盘的物理读取
  • Innodb_buffer_pool_read_requests – 逻辑读取

**经验法则:**如果 reads/read_requests > 1-2%,则说明您的缓冲池太小。

1.2 示例图表

绘制 Innodb_buffer_pool_reads 随时间变化的曲线。健康的系统曲线应保持平稳或缓慢上升。出现类似城市天际线的峰值通常意味着内存压力过大或缓存冷却。

如果说 MySQL 性能方面有一颗璀璨的明珠,那非它莫属。

1.3 它的作用

InnoDB 缓冲池会将表数据和索引缓存到内存中。从内存读取数据速度很快。从磁盘读取数据……简直是磨练意志。

1.4 如何调整它

  • 专用数据库服务器:占用系统内存的 60%–75%
  • 共享服务器:要节约内存,为操作系统和其他服务预留内存
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

1.5 特别提示

如果你的数据库集群能够增加缓冲池,MySQL 会给你带来神奇的体验。但如果放不下,再多的查询优化也无济于事。

2. innodb_buffer_pool_instances

当内存容量增大时,这一点就显得尤为重要。

2.1 它的作用

将缓冲区池拆分为多个实例,以减少内部互斥锁争用。

2.2 如何调整它

  • 仅当 缓冲池大小 ≥ 1GB 时才相关
  • 经验法则:每 1-2GB 内存 1 个实例,最多 8 个实例
SHOW VARIABLES LIKE 'innodb_buffer_pool_instances';

2.3 特别提示

并非越多越好。实例过多会浪费内存,并可能降低性能。

3. innodb_log_file_size

3.1 真正值得关注的指标

SHOW GLOBAL STATUS LIKE 'Innodb_log%';

请注意:

  • Innodb_log_waits
  • Innodb_log_write_requests

如果 Innodb_log_waits 不为零,则 Redo Log 日志对于您的写入速率来说太小。

3.2 示例图表

绘制 Innodb_log_waits 每秒速率图。理想情况下,这条线应该紧贴零点,就像它害怕高度一样。

该变量控制 MySQL 处理写入密集型工作负载的平稳程度。

3.3 它的作用

定义重做日志的大小。日志越大,检查点就越少,写入过程也越流畅。

3.4 如何调校它

  • OLTP 业务 通常 Redo Log 总量为 1-4GB。
  • 大型交易受益于更大的日志
SHOW VARIABLES LIKE 'innodb_log_file_size';

3.5 特别提示

改变这一点需要重新开始。请做好相应计划,否则将承受未来值班时的自己带来的怒火。

4. innodb_flush_log_at_trx_commit

4.1 真正值得关注的指标

SHOW GLOBAL STATUS LIKE 'Innodb_os_log_fsyncs';

从 1 切换到 2 通常 可以大幅减少 fsync 次数。

4.2 示例图表

两条线重叠:

  • Transactions per second
  • Innodb_os_log_fsyncs per second

对于繁忙的系统而言,仅凭这张图表就足以让持怀疑态度的审计人员相信进行更改的合理性。

性能与耐用性,永恒的较量。

4.3 它的作用

控制 Redo Log 日志刷新到磁盘的频率。

4.4 属性值

1 – 最安全,最慢(每次提交都刷新)
2 – 非常受欢迎的折衷方案
0 – 快速、高风险

SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';

4.5 现实检验

对于许多生产系统而言,配置属性 2 可以在可接受的风险范围内带来巨大的性能提升,尤其是在可靠的存储条件下。

5. innodb_flush_method

这个变量决定了 MySQL 如何与磁盘通信。

5.1 它的作用

控制 MySQL 是否使用操作系统缓存或绕过操作系统缓存。

5.2 推荐的配置

innodb_flush_method=O_DIRECT

这样可以避免 MySQL 和操作系统页面缓存之间的双重缓冲。

5.3 特别提示

某些叫旧的文件系统和内核表现可能有所不同,务必进行测试。

6. max_connections

这不是性能调节的旋钮,而是控制耗损的旋钮。

6.1 它的作用

限制并发客户端连接数。

6.2 为什么这很重要

每个连接都会消耗内存,连接过多会导致 MySQL 崩溃。

SHOW VARIABLES LIKE 'max_connections';

6.3 特别提示

  • 设定得切合实际一些
  • 使用连接池
  • 监控 Threads_connected

7. thread_cache_size

7.1 真正值得关注的指标

SHOW GLOBAL STATUS LIKE 'Threads%';

关键字段:

  • Threads_created
  • Connections

如果 Threads_created / Connections 始终高于几个百分点,则说明您的缓存容量不足。

7.2 示例图表

将线程数 Threads_created 作为计数器。一个健康的系统会呈现随时间推移而趋于平缓的曲线,而不是阶梯状曲线。

小改变,大胜利。

7.3 它的作用

缓存线程,这样 MySQL 就不会不断地创建和销毁线程。

7.4 如何调整它

SHOW STATUS LIKE 'Threads_created';

如果该数值持续上升,则增加 thread_cache_size。

8. table_open_cache 和 table_definition_cache

元数据比人们想象的更重要。

8.1 它们的作用

缓存打开的表和表结构,以避免重复访问文件系统。

  • Opened_tables 值高
  • 元数据锁定等待
SHOW VARIABLES LIKE 'table_open_cache';
SHOW VARIABLES LIKE 'table_definition_cache';

9. tmp_table_size 和 max_heap_table_size

9.1 真正值得关注的指标

SHOW GLOBAL STATUS LIKE 'Created_tmp%';

观察:

  • Created_tmp_tables
  • Created_tmp_disk_tables

如果磁盘临时表超过总临时表的 5% 至 10%,则查询会溢出到磁盘。

9.2 示例图表

堆积面积图:

  • 内存临时表
  • 基于磁盘的临时表

磁盘使用率缓慢上升通常表明存在伪装成 OLTP 的报表查询。

基于磁盘的临时表是性能的隐形杀手。

9.3 它们的作用

限制内存临时表的大小。

9.4 如何调整他们

将两者设置为相同的值:

tmp_table_size=256M
max_heap_table_size=256M

9.5 特别提示

这有助于解决复杂的查询问题,但仍然需要修复错误的查询。

10. slow_query_log 和 long_query_time

这不是一项绩效指标,而是一项绩效启示 。

10.1 为什么这很重要

你无法调整你看不见的东西。

slow_query_log=ON
long_query_time=1

这使得猜测变成了证据。

关于绘制这些指标图表的说明

你不需要什么特殊的工具。这些工具就很好用:

  • performance_schema
  • sys schema 视图
  • Prometheus + mysqld_exporter
  • Percona Monitoring and Management (PMM)

黄金法则:永远绘制比率图表,而不是原始计数。

最后想说的话

MySQL 的优化与其说是调整无穷无尽的参数,不如说是 了解压力点:

  • 第一是内存
  • 第二是 I/O
  • 第三是并发性

大多数性能提升都来自于 少数几个变量,而不是充满传奇色彩的复杂配置文件。

如果今天只能调整一项,那就调整缓冲池。如果只能调整两项,那就添加 Redo Log。其他一切都是精益求精。

如果你明天又觉得无聊,恭喜你,你正式成为一名数据库专家了。∎

MySQL性能优化实战:抓住内存、日志、连接三个核心变量 MySQL性能优化常陷入盲目调参的误区,但真正决定数据库命运的核心变量并不多。理解其底层原理至关重要,优化本质上围绕三个层面展开:数据缓存、日志落盘与连接管理。缓存层面,innodb_buffer_pool_size决定数据页驻留内存的比例,直接影响磁盘IO频率与缓冲池命中率;日志层面,redo log容量与刷盘策略innodb_flush_log_at_trx_commit决定了写入吞吐的上限,影响着数据库在高并发写入下的稳定性;连接层面,max_connections与线程缓存则关乎系统在高并发下是否会 阅读详情

相关推荐

MySQL---存储过程(局部变量、用户变量、系统变量(全局变量、会话变量)、传参(in、out、inout))

局部变量:用户自定义,在begin/end块中有效--语法: 声明变量 declare var_name type [default var_value];begin-- 定义局部变量end $$delimiter;-- 调用存储过程MySQL中还可以使用col_name参数表示查询的字段名称;var_name参数是变量的名称;table_name参数指表的名称;condition参数指查询条件。

weixin_43961909的博客 1954

mysql服务器选项变量以及性能优化

mysql服务器选项变量以及性能优化服务器系统变量获取系统变量修改服务器变量的值修改全局变量:仅对修改后新创建的会话有效;对已经建立的会话无效修改会话变量服务器状态变量状态变量(只读):用于保存mysqld运行中的统计数据的变量,不可更改服务器变量SQL_MODE查询缓存哪些查询可能不会被缓存查询缓存相关的服务器变量SELECT语句的缓存控制query_cache_type参数变量查询缓存相关的状态变量:SHOW GLOBAL STATUS LIKE ‘Qcache%';命中率和内存使用率估算 服务器系统变

枫叶斜阳的博客 198

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 965

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点2:系统变量的确认

mysql>mysql>VARIABLE_NAME:变量名VARIABLE_VALUE:变量值。对于global_variables,表示全局值;对于session_variables,表示当前会话生效的变量值;对于persisted_variables,表示持久存储的变量值。THREAD_ID:会话级别系统变量对应的线程IDVARIABLE_NAME:会话级别系统变量名VARIABLE_VALUE:会话级别系统变量值列名解释变量名配置的来源,也就是由于什么改变了变量。

SQLplusDB的小院 1301

ABAP 7.40 新语法介绍系列之二 - ABAP 类型转换操作符 CONV

这个lv_input_s变量的唯一使命,就是接收来自 char10 类型的 lv_input_c 变量的值,然后传递到 print 方法里去。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1414

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5276

【MySQL性能优化】Mysql系统变量配置

MySQL 5.5版本支持超过300种可配置的系统变量。其中很 多系统变量如果得到正确设定,可以对整体系统性能改进起到很 大作用。系统变量可以定义MySQL的配置方式、重要的文件和   数据的存放位置、如何管理兼容性以及MySQL拓扑内的交互等。 在本章和本书中有关优化SQL语句的章节中,我们将集中讨论一 小部分对执行和优化单个SQL语句有直接影响的MySQL系统 变量。 本章将介绍下面的...

1410

【从零到一】Jetson Nano上YOLOv5部署完全攻略:零基础小白也能玩转边缘AI推理

文章摘要: 本文详细介绍了在Jetson Nano边缘设备上部署YOLOv5目标检测模型的完整流程。从硬件准备、系统镜像烧录、基础环境配置,到CUDA/cuDNN验证、Python虚拟环境搭建及PyTorch安装,逐步指导开发者完成部署准备。教程兼顾理论原理与实践操作,提供Python和C++两种实现方案,并涵盖TensorRT优化、实时检测等生产级应用场景,帮助零基础开发者快速掌握边缘AI推理技术,实现高性能目标检测应用。

LXY_LOVE36的博客 367

mysql 定义变量_MySQL-查询性能优化

在日常开发中,程序员写的最多的除了bug之外,应该算是SQL语句了。SQL的质量影响了程序的响应速度,只有利用MySQL的特性,才能让MySQL更有效的执行查询SQL,充分发挥MySQL的优势,并避开它的弱点。为什么查询速度会慢?在编写SQL之前,需要清楚一点 -- 真正重要的是响应时间。如果我们把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,就是要优...

weixin_39648432的博客 554

GRCNN抓取网络学习2【自制Jacquard数据集训练】

请先完成【机械臂视觉抓取从理论到实战】,这样有利于下面操作的理解!然后第二步是GRCNN抓取网络1【Jacquard数据集等效抓取集制作】,有了自己的数据集输入到GRCNN中是三种文件,接下来就是准备训练GRCNN网络啦!grasps.txtRGB.png本文帮大家根据自制Jacquard数据集训练GRCNN抓取网络,其中包含数据格式的对齐,列举了常见的几种训练方法,相信能坚持到这里的都应该试试顺利了吧!接下来会针对GRCNN调优,期待一下下吧,那就别宁色你的三连。

vor234的博客 2790

R语言 百度坐标转换至WGS84坐标

本文利用R语言封装了百度坐标转换至WGS84坐标的函数,亲测有效,提供了便捷的百度坐标转换方法。

qingchen98的博客 2135

mysql 优化 >_MySQL 性能优化之一 重要配置变量优化

原文链接:key_buffer_size本节提到的MySQL配置变量:key_buffer_size设置索引表可以使用的内存总空间,越大说明会有越多的 MyISAM表的索引文件*.MYI 保存在内容中。本节提到的MySQL状态变量:key_reads访问索引表的查询访问了硬盘的总次数,特指查询使用的索引表没有放入内存, 不得不去访问硬盘的情况,这个值越小越好。key_read_requests访问...

weixin_32541333的博客 141

android 如何分析应用的内存(十六)——使用AS查看Android堆

在前面,先介绍了如何使用jdb和VS code查看应用栈相关内容。本文将介绍,如何查看堆中的内容。

安仔的博客 4252

Mysql 服务器选项变量 和 缓存性能优化(重点)

文章目录服务器配置获取mysqld的可用选项列表服务器系统变量服务器状态变量:服务器变量SQL_MODE 服务器配置 mysqld选项,服务器系统变量和服务器状态变量 https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html https://mariadb.com/kb/en/full-list-of-mariadb-options-system-and-status-variables/ 注意:其中有些参数支

weixin_45697293的博客 228

微信小程序云开发 - 实现商家转账到零钱(微信企业付款到零钱) V3功能流程及完整实例代码,过微信云开发的云函数实现企业付款到零钱(提供详细示例源码纯云函数实现,证书、密钥、签名等各种常见问题解决方案

企业付款到零钱(微信小程序提现功能,提现到零钱)微信小程序-云函数实现微信企业付款到零钱功能,实现微信商户号中的企业付款到零钱的功能,微信小程序+云开发+商家转账至零钱+微信小程序用户提现,使用云开发环境的云函数实现微信小程序的支付功能,微信小程序实现微信企业付款到零钱功能的流程,V3 V2基于微信云开发的商家转账至零钱,小程序云函数企业付款到零钱功能实现,云开发实现微信商户支付企业付款到零钱功能,不用服务器纯云函数实现,详细示例代码demo教程,API证书错误,转账不到账怎么办,密钥生成有误,转账失败,有

🏆 前端领域优质创作者 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【MySQL】MySQL 8.0 状态变量(Server Status Variables)以及SHOW STATUS命令

【声明】文章仅供学习交流,观点代表个人,与任何公司无关。编辑|SQL和数据库技术(ID:SQLplusDB)

SQLplusDB的小院 1589

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【MySQL】MySQL 8.0 状态变量(Server Status Variables)列表(show status 的结果例)

【声明】文章仅供学习交流,观点代表个人,与任何公司无关。编辑|SQL和数据库技术(ID:SQLplusDB)

SQLplusDB的小院 1321

Go-MySQL-Driver系统变量设置:连接时自动配置MySQL参数

还在为每次连接MySQL都要手动设置系统变量而烦恼吗?Go-MySQL-Driver提供了强大的DSN参数机制,让你在建立连接时自动配置MySQL系统变量,彻底告别繁琐的手动设置! 读完本文,你将掌握: - ✅ 系统变量设置的完整语法规则 - ✅ 布尔型、枚举型、字符串型变量的正确配置方法 - ✅ 常用系统变量的实战配置示例 - ✅ 高级用法和最佳实践 - ✅ 常见问题排查技巧 ## 为什么需...

gitblog_00221的博客 839

mysql系统变量(下)

70、read_only                               | OFF 当变量对复制从服务器设置为ON时,从服务器不允许更新,除非通过从服务器的线程或用户拥有SUPER权限。可以确保从服务器不接受客户端的更新命令。 READ_ONLY不适用临时表,也防止服务器日志表插入行,这个变量并不妨碍分析TABLE或OPTIMIZE TABLE命令语句的使用,因为其目的是为了防止表的

DBA日志小记 450

MySQL之查询性能优化(十四)

不仅是在SELECT语句中,在其他任何类型的SQL语句中都可以对变量进行赋值。事实上,这也是用户自定义变量最大的用途。例如,可以像前面使用子查询的方式改进排名语句一样改进UPDATE语句。不过我们需要使用一些技巧来获得我们希望的效果。有时,优化器会把变量当作一个编译时常量来对待,而不是对其进行赋值。将函数放在类似于LEAST()这样的函数中通常可以避免这样的问题。另一个办法是在查询被执行前检查变量是否被赋值。不同的场景下使用不同的办法。1.查询运行时计算总数和平均值。

Cover_sky的博客 1232

MySQL性能优化之参数配置

MySQL性能优化之参数配置1、目的:通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能。2、服务器参数:32G内存、4个CPU,每个CPU8核。3、MySQL目前安装状况。MySQL目前安装,用的是MySQL默认的最大支持配置。拷贝的是my-huge.cnf.编码已修改为UTF-8.具体修改及安装MySQ...

weixin_33932129的博客 629

Mysql全局变量查询及设置

SET GLOBAL max_allowed_packet=53687091200;

纸上得来终觉浅,绝知此事要躬行 1万+

mysql系统变量专题学习

要深入研究mysql那首先对mysql的一些系统/扩展变量有一定的了解,因为这些变量不仅决定mysql一些配置信息,还影响了mysql的性能优化提升,其中包括安全、优化、并发、复制等等。 笔者上网查了一下,这些资料有限,以及官网的一个中文文档介绍的内容简短(不包括值域,作用域,有些变量压根没翻译只是给出值)所以想写篇文章,一来学习巩固一下mysql,二来方便以后查阅。其中内容笔者前后用了

putaozhuose的专栏 820

新特性解读 | MySQL 8.0 多因素身份认证

作者:金长龙 爱可生测试工程师,负责DMP产品的测试工作 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 MySQL 8.0.27 增加了多因素身份认证(MFA)功能,可以为一个用户指定多重的身份校验。为此还引入了新的系统变量 authentication_policy ,用于管理多因素身份认证功能。 我们知道在 MySQL 8.0.27 之前,create user 的时候可以指定一种认证插件,在未明确指定的情况下会取系统变量 default_au.

ActionTech的博客 5397
上一篇: 2026 年 AI 预言:幻觉监管、GPU 现实撞墙与 “广告版” ChatGPT 的到来
下一篇: 2026 年,优秀的 DBA 需要具备哪些素质?
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值