MySQL 性能优化:真正重要的变量 📅 发布时间:2026/7/15 2:34:46 👁️ 浏览次数: 作者Wayne LeutwylerPercona 技术客户经理原文https://percona.community/blog/2026/02/01/tuning-mysql-for-performance-the-variables-that-actually-matter/Feb 1, 2026爱可生开源社区翻译本文约 1900 字预计阅读需要 8 分钟。有一种只有 DBA 才能体会的无聊。就是盯着运行的服务器心想肯定有什么地方可以优化。好消息是确实有。本文将详细介绍几个能提升 MySQL 性能的变量解释它们的重要性以及调整这些变量何时能带来性能提升何时又会悄然降低性能。本文主要针对 InnoDB 存储引擎。1. innodb_buffer_pool_size1.1 真正值得关注的指标在修改这个变量之前请先查看以下内容SHOWGLOBALSTATUSLIKEInnodb_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%共享服务器要节约内存为操作系统和其他服务预留内存SHOWVARIABLESLIKEinnodb_buffer_pool_size;1.5 特别提示如果你的数据库集群能够增加缓冲池MySQL 会给你带来神奇的体验。但如果放不下再多的查询优化也无济于事。2. innodb_buffer_pool_instances当内存容量增大时这一点就显得尤为重要。2.1 它的作用将缓冲区池拆分为多个实例以减少内部互斥锁争用。2.2 如何调整它仅当缓冲池大小 ≥ 1GB时才相关经验法则每 1-2GB 内存 1 个实例最多 8 个实例SHOWVARIABLESLIKEinnodb_buffer_pool_instances;2.3 特别提示并非越多越好。实例过多会浪费内存并可能降低性能。3. innodb_log_file_size3.1 真正值得关注的指标SHOWGLOBALSTATUSLIKEInnodb_log%;请注意Innodb_log_waitsInnodb_log_write_requests如果Innodb_log_waits不为零则 Redo Log 日志对于您的写入速率来说太小。3.2 示例图表绘制Innodb_log_waits每秒速率图。理想情况下这条线应该紧贴零点就像它害怕高度一样。该变量控制 MySQL 处理写入密集型工作负载的平稳程度。3.3 它的作用定义重做日志的大小。日志越大检查点就越少写入过程也越流畅。3.4 如何调校它OLTP 业务通常 Redo Log 总量为 1-4GB。大型交易受益于更大的日志SHOWVARIABLESLIKEinnodb_log_file_size;3.5 特别提示改变这一点需要重新开始。请做好相应计划否则将承受未来值班时的自己带来的怒火。4. innodb_flush_log_at_trx_commit4.1 真正值得关注的指标SHOWGLOBALSTATUSLIKEInnodb_os_log_fsyncs;从1切换到2通常可以大幅减少 fsync 次数。4.2 示例图表两条线重叠Transactions per secondInnodb_os_log_fsyncs per second对于繁忙的系统而言仅凭这张图表就足以让持怀疑态度的审计人员相信进行更改的合理性。性能与耐用性永恒的较量。4.3 它的作用控制 Redo Log 日志刷新到磁盘的频率。4.4 属性值1 – 最安全最慢每次提交都刷新2 – 非常受欢迎的折衷方案0 – 快速、高风险SHOWVARIABLESLIKEinnodb_flush_log_at_trx_commit;4.5 现实检验对于许多生产系统而言配置属性2可以在可接受的风险范围内带来巨大的性能提升尤其是在可靠的存储条件下。5. innodb_flush_method这个变量决定了 MySQL 如何与磁盘通信。5.1 它的作用控制 MySQL 是否使用操作系统缓存或绕过操作系统缓存。5.2 推荐的配置innodb_flush_methodO_DIRECT这样可以避免 MySQL 和操作系统页面缓存之间的双重缓冲。5.3 特别提示某些叫旧的文件系统和内核表现可能有所不同务必进行测试。6. max_connections这不是性能调节的旋钮而是控制耗损的旋钮。6.1 它的作用限制并发客户端连接数。6.2 为什么这很重要每个连接都会消耗内存连接过多会导致 MySQL 崩溃。SHOWVARIABLESLIKEmax_connections;6.3 特别提示设定得切合实际一些使用连接池监控Threads_connected7. thread_cache_size7.1 真正值得关注的指标SHOWGLOBALSTATUSLIKEThreads%;关键字段Threads_createdConnections如果Threads_created / Connections始终高于几个百分点则说明您的缓存容量不足。7.2 示例图表将线程数Threads_created作为计数器。一个健康的系统会呈现随时间推移而趋于平缓的曲线而不是阶梯状曲线。小改变大胜利。7.3 它的作用缓存线程这样 MySQL 就不会不断地创建和销毁线程。7.4 如何调整它SHOWSTATUSLIKEThreads_created;如果该数值持续上升则增加thread_cache_size。8. table_open_cache 和 table_definition_cache元数据比人们想象的更重要。8.1 它们的作用缓存打开的表和表结构以避免重复访问文件系统。Opened_tables值高元数据锁定等待SHOWVARIABLESLIKEtable_open_cache;SHOWVARIABLESLIKEtable_definition_cache;9. tmp_table_size 和 max_heap_table_size9.1 真正值得关注的指标SHOWGLOBALSTATUSLIKECreated_tmp%;观察Created_tmp_tablesCreated_tmp_disk_tables如果磁盘临时表超过总临时表的 5% 至 10%则查询会溢出到磁盘。9.2 示例图表堆积面积图内存临时表基于磁盘的临时表磁盘使用率缓慢上升通常表明存在伪装成 OLTP 的报表查询。基于磁盘的临时表是性能的隐形杀手。9.3 它们的作用限制内存临时表的大小。9.4 如何调整他们将两者设置为相同的值tmp_table_size256M max_heap_table_size256M9.5 特别提示这有助于解决复杂的查询问题但仍然需要修复错误的查询。10. slow_query_log 和 long_query_time这不是一项绩效指标而是一项绩效启示 。10.1 为什么这很重要你无法调整你看不见的东西。slow_query_logONlong_query_time1这使得猜测变成了证据。关于绘制这些指标图表的说明你不需要什么特殊的工具。这些工具就很好用performance_schemasysschema 视图Prometheus mysqld_exporterPercona Monitoring and Management (PMM)黄金法则永远绘制比率图表而不是原始计数。最后想说的话MySQL 的优化与其说是调整无穷无尽的参数不如说是了解压力点第一是内存第二是 I/O第三是并发性大多数性能提升都来自于少数几个变量而不是充满传奇色彩的复杂配置文件。如果今天只能调整一项那就调整缓冲池。如果只能调整两项那就添加 Redo Log。其他一切都是精益求精。如果你明天又觉得无聊恭喜你你正式成为一名数据库专家了。∎
建议收藏!普通人怎么抓住AI这波红利?AI时代,这是普通人翻身的好机会 很多人都在焦虑:AI会不会抢走我的工作?与其内耗担心被替代,不如换个思路——打不过,就加入。 AI从来都不是你的敌人,而是这个时代给普通人的最强外挂。 这两年深度使用、研究AI,我最大的感悟就是一个原则&a… 2026/7/13 23:47:22
救命神器!更贴合专科生的AI论文网站,千笔AI VS 灵感风暴AI 随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为专科生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生,开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时,市场… 2026/7/12 15:48:23
谷歌连夜封禁,全行业集体堵截,OpenClaw 到底动了谁的蛋糕? 谷歌连夜封禁,全行业集体堵截,OpenClaw 到底动了谁的蛋糕? 原创 苗正 苗正 字母AI 2026年2月25日 11:44 在小说阅读器中沉浸阅读 人红是非多,自OpenClaw爆火以后它就不断遭受争议,现如今谷歌打响了反OpenClaw的第一… 2026/7/10 23:37:50
一切色彩的起点:深入理解基础色贴图(Albedo) 引子:一场"化妆"引发的翻车事故 让我先给你讲一个真实得让无数新手美术"血泪斑斑"的故事。 小张是一名刚入行的 3D 游戏美术。这天,他接到任务——为游戏里的一面古老石墙制作材质。他信心满满,找来一张拍得极为精美的真… 2026/7/15 2:33:56
agent开发实战(智能文档问答) 我利用ai辅助制作了一个agent,效果如下图 由于篇幅太长,且因为格式问题不便阅览,我将开发流程记录以及所有文件(env文件没传上去需要自己创建)放在了github主页上,仓库地址为:iwait3/Intelligen… 2026/7/15 2:33:56
软件工程案例教程:从课后习题到项目实战的思维跃迁 1. 从课后习题到项目实战的思维转变很多软件工程专业的学生都有这样的困惑:课本上的填空题、选择题都能做对,但一到实际项目开发就手足无措。这其实是因为课后习题和真实项目之间存在着一道需要跨越的思维鸿沟。课后习题通常考察的是孤立的知识点&#x… 2026/7/15 2:29:54
Java并发编程——ConcurrentHashMap源码深度剖析与实战应用 1. 为什么需要ConcurrentHashMap?在日常开发中,我们经常会遇到需要统计用户访问次数的场景。假设我们用普通的HashMap来实现这个功能,代码可能是这样的:public class HashMapDemo {private static final HashMap<String, Integ… 2026/7/15 2:25:52
ABAP新语法实战:Open SQL内置函数在数据转换与业务逻辑下推中的应用 1. Open SQL内置函数为何成为ABAP开发利器第一次接触Open SQL内置函数时,我正被一个财务报表项目折磨得焦头烂额。客户要求实时计算不同币种间的汇率转换,传统做法需要在ABAP层循环处理每笔交易,结果性能差到每次运行都要喝两杯咖啡才能等到结… 2026/7/15 2:25:52
从可逆到安全:基于进制转换与混淆扩散的邀请码生成方案深度解析 1. 邀请码生成的核心挑战想象一下你正在运营一个社交APP,需要给每个用户生成专属邀请码。这个看似简单的需求背后,隐藏着三个技术难题:唯一性就像身份证号,每个用户的邀请码必须独一无二。我曾见过某电商平台因为邀请码重复&#… 2026/7/15 2:23:51
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41