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

雨晨酱_4111

雨晨酱_4111

2026-05-25

911人浏览

原创

根本原因是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倾向。

  • 确认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的硬控制。

MySQL8 CRM Schema Design Expert
MySQL8 CRM Schema Design Expert

面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。

下载
  • 在/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就可能在半夜流量高峰时悄然回升——而监控告警往往只报“慢查询”,不会告诉你页正在磁盘和内存间流浪。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql 操作系统 大数据

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.06.21

5796

5

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

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

2025.12.08

1269

12

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

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

2026.01.05

243

5

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

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

2026.01.05

526

22

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

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

2023.10.17

5020

11

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

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

2024.03.20

3886

12

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

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

2024.03.21

6939

8

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

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

2024.04.12

3215

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

3804

6

热门下载

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

精品课程

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

共1课时 | 193人学习