关系型数据库Transaction
事务 ACID 是什么?
一组操作要么全部成功,要么全部失败,且互不干扰
类比:转账,扣钱和加钱必须同时生效
四个字母的含义
这四个特性分别由不同机制保证,面试常问「靠什么实现」。
- 原子性 A:undo log 记录反向操作,失败时回滚
- 一致性 C:最终目标,由 A、I、D 和应用逻辑共同保证
- 隔离性 I:锁 + MVCC
- 持久性 D:redo log 顺序写,提交即落盘
两阶段提交
redo log 是 InnoDB 的,binlog 是 Server 层的,两者必须一致。MySQL 用两阶段提交:先写 redo 并标记 prepare,再写 binlog,最后 redo 标记 commit。崩溃恢复时据此判断是提交还是回滚。
长事务的危害
长事务会持有锁、撑大 undo log、阻碍 purge、拖慢主从。排查:information_schema.innodb_trx 里看 trx_duration,超过几十秒的都该审视。