-
我的分页接口每次都查一下总共有多少条数据好显示总页数,小表时秒回,数据涨到几千万后这个 COUNT 比查数据本身还慢、直接拖垮了接口的深度复盘
我有个分页列表接口,每次都做两件事:查当前页数据(带 LIMIT)和 SELECT COUNT(*) 查总条数(为了显示共 N 条、共 M 页)。数据量小时一切秒回,可这张表涨到几千万行后接口越来越慢,一查傻眼:慢的不是查当前页(有索引、LIMIT 很快),而是那个看起来最简单的 COUNT(*)——它居然比查数据本身还慢得多、一次要好几秒,拖垮了整个接口。复盘才想明白:InnoDB 不像 MyI…- 0
- 0
-
两个并发事务因为以不同的顺序去更新两条记录,互相等着对方手里的锁,撞成了死锁、被 MySQL 强行回滚了一个:一次数据库死锁的深度复盘
转账接口高并发时偶发 Deadlock found,部分请求失败。根因是一个事务要更新两条记录,而不同请求加锁顺序不同:A→B 的请求先锁 A 再锁 B、B→A 的先锁 B 再锁 A,并发时事务1持有A等B、事务2持有B等A,互相等待形成循环等待的环、谁也走不了,MySQL 检测到死锁就回滚其中一个。本文讲透死锁怎么形成和它的四个必要条件,给出固定加锁顺序(破坏循环等待,最有效)、缩小事务/缩短持…- 0
- 0
-
MySQL UPDATE 8000 万行被 kill 后 rollback 90 分钟主库锁死 3 小时的真实事故复盘:InnoDB 回滚机制 + 拆批策略 + 10 条治理纪律
2026 年 2 月一次 UPDATE 8000 万行的合规任务跑了 4 小时,DBA 担心影响早高峰执行 KILL,结果 rollback 比正向执行更慢——花 90 分钟才完成,主库锁死 3 小时,业务超时 41 万笔,直接损失 80 万。复盘 InnoDB 回滚单线程机制 + 5 种大事务典型场景 + SafeBatchUpdater 框架 + 8 条工程纪律。- 4
- 0
-
数据库死锁完全指南:从一次"两条没问题的 SQL 放一起却死锁"看懂为什么加锁顺序才是根因
2022 年我做一个电商的下单功能用户下单要做两件互相关联的事扣掉商品的库存在用户账户上记一笔消费这两件事必须一起成功或一起失败我自然用一个数据库事务把它们包起来第一版我做得很顺手事务开始 UPDATE 商品表扣库存 UPDATE 用户表记消费提交本地一测下单流畅库存和账户都对得上我心里很笃定事务嘛把要一起成功的几步包进 BEGIN COMMIT 数据库自己保证它们要么全成要么全败这下单稳了可等真…- 0
- 0
-
RR 隔离级别 + INSERT ON DUPLICATE KEY UPDATE:让我半夜爬起来的死锁实录
凌晨 2 点 47 分,告警群弹出 5 条 MySQL 死锁日志。本文复盘从 SHOW ENGINE INNODB STATUS 看到 gap lock 真相、3 次失败修复、到最终 RC 模式 + FOR UPDATE 解决的全过程,附完整 SQL、排查命令和压测对比。- 0
- 0
-
MVCC 完全指南:从 ReadView 到 InnoDB 多版本并发控制
MVCC(Multi-Version Concurrency Control,多版本并发控制)是现代数据库实现"读不阻塞写,写不阻塞读"的关键技术。MySQL InnoDB、PostgreSQL、Oracle 全用它。但大多数人对 MVCC 的理解停留在"有多个版本",问起 ReadView 怎么算、四个隔离级别下具体怎么工作、为什么 RR 隔离级别能解决幻…- 0
- 0
-
InnoDB 锁机制完全指南:Next-Key Lock、间隙锁与死锁排查
"为什么我的 UPDATE 把整张表锁了?""死锁日志里的 Next-Key Lock 是什么?""间隙锁怎么避免?" —— InnoDB 锁机制是 MySQL DBA 的入门必考题。这篇文章把 InnoDB 各种锁讲透:行锁、间隙锁、Next-Key Lock、意向锁、记录锁,以及它们在不同 SQL 下的实际行为。所有结论都配可复现的 …- 16
- 0
InnoDB
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!







