PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 30 篇文章
    • MySQL 10 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 3 篇文章
    • ProxySQL 2 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← 返回博客

高负载下的 MyRocks:当 ALTER TABLE 触发损坏

发布于 2026年3月6日 作者 Aurélien LEQUOY
mariadb rocksdb corruption ddl incident-response mdev-39044
分享 X LinkedIn Facebook Email PDF
高负载下的 MyRocks:当 ALTER TABLE 触发损坏

背景

2026 年 3 月 6 日,一台由 PmaControl 监控的 MariaDB 10.11.15 生产服务器发生了一起重大事故。与典型的崩溃(OOM、段错误)不同,这次事故呈现了独特的症状:

RocksDB: Error opening instance, Status Code: 2,
  Status: Corruption: truncated record body
Incorrect information in file: './pmacontrol/ts_value_general_int.frm'
Can't init tc log
Aborting

服务器在稳定之前循环重启了数次,多个时间序列表出现 .frm mismatch 错误。

MDEV-39044 工单

经过调查,我们将此事故与 MariaDB 工单 MDEV-39044 关联起来:

ALTER 工作负载期间/之后重启导致的 MyRocks 损坏:Corruption: truncated record body,.frm mismatch,无崩溃日志,无 OOM killer

工单描述的内容

该工单记录了一个可复现的损坏场景:

  1. 大型分区 RocksDB 表 ——正是 PmaControl 用于指标的内容(按天分区的 ts_value_* 表)
  2. 写入负载下的 ALTER TABLE ——在应用程序持续写入时添加分区
  3. 同时的 InnoDB 内存压力 ——InnoDB 和 RocksDB 表共存于同一台服务器
  4. 无内核追踪 ——无 OOM killer、无段错误、无崩溃日志

为什么如此隐蔽

该工单最危险的方面:在此场景中,没有崩溃日志是预期行为。服务器重启,执行 InnoDB crash recovery,但 RocksDB 元数据已损坏(.frm mismatch)。

一个只检查 journalctl 或 dmesg 的 DBA 什么也找不到。他们会将该事故归类为"原因不明的重启"然后继续前进。

我们的具体案例

受影响的表

所有有大量日写入的分区 RocksDB 表:

  • ts_value_general_int ——整数指标(状态变量、计数器)
  • ts_value_general_json ——复杂的 JSON 指标
  • ts_mysql_digest_stat ——查询统计(摘要)
  • ts_value_general_text ——文本指标
  • ts_value_slave_int ——复制指标
  • ts_value_slave_text ——详细的复制状态

可能的触发条件

PmaControl 自动维护这些表上的分区:添加次日分区,删除过期分区。这些是对数十 GB 重量级表执行的 ALTER TABLE ... ADD PARTITION / DROP PARTITION 操作,同时采集 worker 持续写入(每个被监控服务器每 10 秒一次)。

内存压力信号

在崩溃之前,MariaDB 日志显示:

InnoDB: Memory pressure event disregarded

MDEV-39044 工单明确引用此模式为一个加重因素。InnoDB 内存压力不会直接导致损坏,但它创建了 RocksDB DDL 变为非原子性的上下文。

PmaControl 如何检测到事故

  1. 运行时间重置 通过 ts_variable.uptime 时间序列在 10 秒内检测到
  2. Telegram 告警 立即发送
  3. 自动关联 错误日志:检测到 crash recovery + truncated record body 签名
  4. 回溯分析:前一个小时的指标(线程、内存、CPU)正常——确认这不是典型的负载问题

建议

立即行动

  1. 不要在写入负载下对 RocksDB 表执行 DDL。将 ALTER TABLE ... ADD/DROP PARTITION 安排在低活动时段。

  2. 监控错误日志中的 .frm 错误。这是 DDL 后损坏的第一个指标。

  3. 关注 MDEV-39044 工单 等待官方修复。

结构性行动

  1. 分离引擎:如果可能,不要在同一台服务器上混合使用 InnoDB 和 RocksDB 来处理关键表。

  2. 考虑将热表迁移到 InnoDB。RocksDB 在顺序写入方面表现出色,但其 DDL 操作在负载下不是原子性的。

  3. 合理分配内存 以避免加重问题的 InnoDB 压力。参阅我们关于 OOM killer 的文章了解最坏情况的计算。

这不是什么

  • 这不是硬件问题(磁盘、内存)
  • 这不是 MySQL 配置问题(参数是正确的)
  • 这不是可按需复现的(这是 RocksDB/DDL 引擎中的竞态条件)

这是一个由 MariaDB 自己记录的引擎缺陷。

结论

MDEV-39044 提醒我们,在生产工作负载上使用替代存储引擎(RocksDB、TokuDB)需要对 DDL 保持特别的警惕。没有崩溃日志不意味着没有损坏。

PmaControl 通过 uptime 监控 + 错误日志关联来检测这些事故,而标准工具什么也看不到。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept