一个未提交的只读查询让 MySQL 副本堆积十亿行历史版本
一篇 MySQL 排障实录:一个只读副本上未提交的读事务长期持有 read view,导致 InnoDB 无法 purge 旧行版本,历史版本堆积到约十亿行;每次读取都要走越来越长的版本链,副本复制也属于读负载,因此持续落后,落后时间已爬到 260,000 秒(约三天)且一周来不断上升。 主库流量没变(约 15k QPS、写速率平稳),排除了 backfill 等因素。文章强调修复只需一条 KILL,而定位到该杀哪个会话只需一条查询。 属于工程实践+一手现场排查,适合 DBA/性能调优读者深挖。