专栏名称: dbaplus社群
围绕Database、BigData、AlOps的企业级专业社群。资深大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,每季度XCOPS\x26amp;DAMS行业大会。
TodayRss-海外RSS稳定源
目录
相关文章推荐
今天看啥  ›  专栏  ›  dbaplus社群

小心!你的DDL变更可能正悄悄搞垮MySQL性能……

dbaplus社群  · 公众号  · 数据库  · 2025-10-13 07:15
    

主要观点总结

文章详细分析了MySQL在进行DDL变更时,由于单行记录过大以及MySQL的页分裂机制导致的表空间膨胀问题。问题表现为变更后的表存储空间膨胀了几乎100%,同时统计信息出现严重偏差,部分SQL查询出现慢查。文章通过详细分析InnoDB的索引机制、页溢出、页分裂等概念,结合当前DDL变更流程,揭示了问题的根源在于DDL变更流程中的全量数据复制和增量binlog回放并行执行,以及单行记录过大时MySQL页分裂的瑕疵。文章还提出了临时和长期的解决方案,临时解决方案包括在低峰期执行原生DDL语句,长期解决方案是修改DDL变更流程,先执行全量数据复制,再进行增量binlog回放。

关键观点总结

关键观点1: 问题背景

业务同学在OneDBA平台进行DDL变更后,发现SQL慢查,表存储空间膨胀,经分析发现MySQL在B+tree页分裂时遇到单行记录过大时的缺陷。

关键观点2: 索引结构分析

InnoDB表是索引组织表,B+tree索引分为聚集索引和二级索引,所有行数据都存储在聚集索引,二级索引存储字段值和主键。B+tree分为根页、非叶子节点和叶子节点,最小存储单位是页,每个页有一个编号,页内记录按key升序排列。页面分裂和合并机制是动态管理动态数据的核心机制。

关键观点3: 当前DDL变更机制

变更流程包括创建临时表、拷贝全量数据、增量DML临时存储、全量数据复制后应用增量DML日志、切换新旧表。

关键观点4: 表空间膨胀原因

在DDL变更过程中,如果单行记录过大,MySQL的页分裂机制可能导致一个页只存储一条记录,造成表空间膨胀。

关键观点5: 统计信息偏差原因

当一个页只有一条数据时,统计信息会产生严重偏差,导致部分SQL出现慢查。

关键观点6: 临时解决方案

在低峰期执行原生DDL语句,MySQL内部重新整理表空间数据,解决表空间膨胀问题。

关键观点7: 长期解决方案

修改DDL变更流程,先执行全量数据复制,再进行增量binlog回放,避免页分裂问题。


免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
文章地址: 访问文章快照