讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么MySQL InnoDB查询大数据量时Swap飙升_优化操作系统内存交换

雨晨酱_4111

雨晨酱_4111

发布时间:2026-05-25 11:13:19

|

911人浏览过

|

来源于php中文网

原创

根本原因是InnoDB缓冲池与OS内存管理冲突:innodb_buffer_pool_size过大、swappiness未调低、memlock未启用三者缺一都会导致mysqld被换出到Swap。

为什么mysql innodb查询大数据量时swap飙升_优化操作系统内存交换

MySQL查询大数据量时Swap飙升,根本不是数据量本身的问题,而是InnoDB缓冲池和操作系统内存管理策略冲突导致的——innodb_buffer_pool_size设得太大、swappiness没压住、memlock没锁死,三者缺一都会让mysqld进程被内核悄悄换出。

为什么查4000万行就触发Swap,而不是CPU或IO瓶颈

现象是“CPU很低但SELECT 1超时”“慢查询日志里全是Waiting for table flush”,这不是SQL慢,是页在磁盘和内存之间反复搬运。InnoDB以为数据还在buffer pool里,实际已被OS踢进Swap,每次访问都触发毫秒级磁盘读,响应时间从微秒跳到百毫秒以上。

  • 用vmstat 1看si(swap-in)和so(swap-out)持续 > 0,基本锁定Swap问题
  • free -h里SwapUsed上涨 + Available used高更危险
  • 别信“清缓存能腾内存”:echo 3 > /proc/sys/vm/drop_caches只会让MySQL更卡——刚清完cache,它立刻要从磁盘重载热数据,加剧swap压力

innodb_flush_method=O_DIRECT必须配对生效,否则白设

innodb_flush_method=O_DIRECT只绕过OS page cache对.ibd文件的缓存,但redo log默认仍走OS buffer。结果是buffer pool和log buffer在内存里抢页,触发频繁page reclaim,间接推高swap倾向。

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载
  • 确认my.cnf中[mysqld]段明确写了:innodb_flush_method=O_DIRECT(不是O_DSYNC,后者不绕cache)
  • 启动后执行SHOW VARIABLES LIKE 'innodb_flush_method',输出必须是O_DIRECT,空值或async_unbuffered都算失败
  • 启用后innodb_buffer_pool_size要下调:原来设80%,现在最多70%,否则启动直接报OOM

swappiness=1只是减缓,memlock=unlimited才是根治

swappiness=0不等于禁用Swap——OOM killer或内存严重不足时,mysqld照样被换出。memlock才是让MySQL进程免疫Swap的硬控制。

  • 在/etc/security/limits.conf加两行:mysql soft memlock unlimited和mysql hard memlock unlimited
  • my.cnf中加:innodb_use_sys_malloc=0(尤其用了jemalloc时)
  • 必须用root启动mysqld(systemd下检查LimitMEMLOCK是否为infinity)
  • 验证是否生效:cat /proc/$(pgrep mysqld)/status | grep -i "cap",CapBnd字段必须含cap_ipc_lock

NUMA架构下不配innodb_numa_interleave,memlock可能白开

多路Xeon服务器上,若MySQL启动时未指定NUMA策略,memlock锁住的内存可能被分配到远端节点,跨NUMA访问延迟高,内核仍可能换出页面。

  • MySQL 5.6.27+ 直接在my.cnf中加:innodb_numa_interleave=ON
  • 旧版本需在启动脚本里用numactl --interleave=all包裹mysqld
  • 不配这个,即使memlock成功,Swap仍可能缓慢上涨,尤其在写密集场景

真正难的是三者协同:memlock锁内存、O_DIRECT断cache争抢、innodb_numa_interleave保本地分配。少一个,Swap就可能在半夜流量高峰时悄然回升——而监控告警往往只报“慢查询”,不会告诉你页正在磁盘和内存间流浪。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

5796

2023.06.21

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

1269

2025.12.08

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

243

2026.01.05

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

526

2026.01.05

视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

5020

2023.10.17

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

3886

2024.03.20

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

6939

2024.03.21

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

3215

2024.04.12

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn