银河麒麟系统运行数据库时出现延迟抖动、查询卡顿或内存异常升高,大概率是透明大页(THP)导致的;必须同时检查/sys/kernel/mm/transparent_hugepage/enabled和/sys/kernel/mm/transparent_hugepage/defrag两个路径,两行输出中均显示[never]才算真正关闭;临时关闭需双写echo never > enabled和echo never > defrag,永久关闭须在GRUB参数添加transparent_hugepage=never并重启系统,且数据库服务需重启才能生效。

银河麒麟系统运行数据库时出现延迟抖动、查询卡顿或内存使用异常升高,大概率是透明大页(THP)在后台持续扫描合并内存页导致的——khugepaged线程会强制迁移、拆分内存,引发大量缺页中断和TLB刷新,直接拖垮OLTP类负载。
确认THP当前是否真正关闭
别只看一个文件:必须同时检查 /sys/kernel/mm/transparent_hugepage/enabled 和 /sys/kernel/mm/transparent_hugepage/defrag 两个路径。
执行:cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag
两行输出中,【方括号[]内都必须是 never】才算真正关闭。若其中一行显示 [always] madvise never 或 madvise [defer+madvise],说明THP仍在后台活跃,数据库性能波动根源就在这里。
立即生效的临时关闭方案
方法一:双写禁用(适用于紧急止损)
执行以下两条命令(缺一不可):
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
⚠️ 注意:此操作仅对当前运行会话有效,重启后自动恢复原设置,不能替代永久配置。
方法二:验证是否生效
再次运行 cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag,确保两行均显示 [never]。
永久关闭THP(推荐方式)
第一步:编辑GRUB启动参数
用root权限打开 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX 行末尾添加 transparent_hugepage=never,注意用空格与其他参数隔开。
第二步:生成新grub配置
根据启动模式选择对应命令:
Legacy BIOS模式 → 执行 grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI模式 → 执行 grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
第三步:重启系统
执行 reboot,重启后内核将从启动阶段就禁用THP,覆盖所有运行时设置。
验证数据库进程是否脱离THP影响
仅改系统配置不等于数据库已生效——旧进程仍沿用启动时的内存策略。
先查MySQL进程ID:pgrep -f "mysqld"
再查其smaps中大页使用情况:grep -i "anonhugepages" /proc/$(pgrep -f "mysqld")/smaps | grep AnonHugePages
输出应为 AnonHugePages: 0 kB;若数值长期非零,【必须重启数据库服务】,例如 systemctl restart mysqld。











