MariaDB Galera集群单节点磁盘访问频繁性能大幅下降问题排查
三节点MariaDB Galera集群单节点故障排查指南
进一步缩小排查范围的步骤
- 对比查询执行计划
对同一个慢查询,分别在故障节点和正常节点执行EXPLAIN ANALYZE <查询语句>,逐项对比执行路径、扫描行数、临时表/文件排序触发情况,确认是否存在执行计划差异。 - 验证底层磁盘性能一致性
三个节点执行相同的fio测试命令,比如fio -name=randrw -ioengine=libaio -bs=16k -rw=randrw -rwmixread=70 -size=1G -direct=1 -numjobs=4 -runtime=60 -group_reporting,对比随机读写IOPS、吞吐量、平均延迟,排除存储层硬件差异。 - 核对InnoDB运行状态
三个节点同时执行SHOW ENGINE INNODB STATUS和SHOW GLOBAL STATUS LIKE 'Innodb_%',对比缓冲池命中率、脏页比例、页读写/刷新的相关指标,确认缓冲池运行状态是否一致。 - 排查节点本地额外负载
用iotop -oP确认高IO进程是否仅为mariadbd,排查是否有本地备份脚本、日志采集工具、定时任务占用磁盘带宽;同时执行dmesg | grep -i error排查是否有磁盘IO错误、文件系统异常的内核日志。 - 验证数据一致性
对慢查询涉及的表,在三个节点分别执行CHECKSUM TABLE <表名>,确认故障节点的表数据、索引是否存在损坏。
可能的故障原因
- 表统计信息过期:故障节点对应表的统计信息未及时更新,导致优化器生成错误执行计划,触发全表扫描或大量随机IO,而其他节点统计信息正常。
- 底层磁盘性能异常:故障节点所在物理机的磁盘存在坏道、RAID卡写缓存关闭、存储层QoS限制,相同IO请求的延迟远高于其他节点,CPU大量时间处于IO等待状态。
- 缓冲池异常:故障节点的InnoDB缓冲池存在内存碎片,或者对应表的热点数据未加载到缓冲池,每次查询都需要从磁盘读取数据页,而其他节点的热点数据已在缓冲池内。
- 表/索引逻辑损坏:故障节点本地存储的表数据、索引页存在逻辑损坏,查询过程中触发额外的校验、重试操作,产生大量多余IO。
- 文件系统配置差异:故障节点的磁盘挂载参数与其他节点不一致,比如未开启noatime、文件系统日志模式为全日志、inode占用率过高,导致IO效率大幅下降。
- Galera本地复制积压:故障节点存在未应用的复制事务队列,查询需要等待事务应用完成或读取待应用的事务日志,产生额外的磁盘读取开销。
内容的提问来源于stack exchange,提问作者user1526836
相关产品推荐
相关产品推荐

