MYSQL在双路CPU的优化实践
最近线上业务服务器 出现性能问题
导致 系统负载飙升到 200% ,业务出现卡顿
检查发现CPU利用率和物理内容未使用,但是SWAP已开始使用
经过优化后正常
安装 NUMA 管理工具:dnf install numactl numactl-libs -y
优化内核限制:
编辑 /etc/sysctl.conf 添加:
vm.swappiness = 10 # 减少对 Swap 的依赖
vm.max_map_count = 262144
禁用透明大页 (THP):echo never > /sys/kernel/mm/transparent_hugepage/enabled
启动脚本的 NUMA 绑定
为了让 MySQL 均匀利用两颗物理 CPU 的内存带宽,需修改启动脚本。
修改 /etc/init.d/mysqld:
找到启动行(通常包含 mysqld_safe),在前面加入 numactl 绑定:# 修改前: $bindir/mysqld_safe --defaults-file=$conf ... # 修改后: /usr/bin/numactl --interleave=all $bindir/mysqld_safe --defaults-file=$conf ...
在检查下是否均衡利用
[root@BizCore ~]# numastat -p 24073
Per-node process memory usage (in MBs) for PID 24073 (mysqld)
Node 0 Node 1 Total
--------------- --------------- ---------------
Huge 0.00 0.00 0.00
Heap 26.89 28.89 55.78
Stack 0.03 0.02 0.05
Private 6293.18 6331.12 12624.30
---------------- --------------- --------------- ---------------
Total 6320.09 6360.03 12680.12
这样就解决了 可以观测到 平均分别配到 Node 1 和 Node 0 2个CPU上了
MYSQL性能大幅度提升 系统负载降低到 5 以内
更新:
因为性能问题,最后切换到衍生版 MariaDB 11.4 / (MYSQL 8.4) LTS 的版本
这个版本确实比MYSQL原生强 尤其是在聚合查询上
现在系统负载直接稳定在2, 不在有线程堵塞的问题了