闭卷说明“ACID 是一组可检验承诺”的对象、成立条件和一个失败反例。
数据库系统 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
闭卷说明“调度与冲突可串行化”的对象、成立条件和一个失败反例。
闭卷说明“脏读、不可重复读与幻读”的对象、成立条件和一个失败反例。
闭卷说明“两阶段锁与锁粒度”的对象、成立条件和一个失败反例。
闭卷说明“死锁检测、预防与重试”的对象、成立条件和一个失败反例。
闭卷说明“MVCC 与快照”的对象、成立条件和一个失败反例。
闭卷说明“隔离级别的实验化选择”的对象、成立条件和一个失败反例。
应覆盖:调度保留各事务内部顺序;若冲突操作形成的优先图无环,则调度冲突可串行化;规则:优先图节点是事务,边来自同一数据项上至少一个为写的有序操作;无环即可拓扑排序;并能围绕“T1 写 A 在 T2 读 A 前形成 T1→T2,若另一对象又形成 T2→T1 就出现环,无法等价为串行顺序”给出可执行或可计算的反查。
应覆盖:原子性保证全做或全不做,一致性依赖约束与事务逻辑,隔离性限制并发可见效果,持久性保证提交后抗故障;规则:ACID 各自有不同故障模型和验收方法,不能用‘用了事务’一语带过;并能围绕“银行转账要同时扣款与入账;余额非负是业务一致性;两个转账并发不能丢更新;提交确认后崩溃仍能恢复”给出可执行或可计算的反查。
应覆盖:严格两阶段锁在提交前持有写锁,保证可串行化和可恢复;行、页、表锁在并发度与管理开销间权衡;规则:增长阶段只加锁,收缩阶段只释放;严格 2PL 把排他锁至少持有到提交或回滚;并能围绕“批量更新大量行可能触发锁升级并阻塞在线请求;意向锁让系统快速判断层级冲突”给出可执行或可计算的反查。
应覆盖:异常应从具体操作序列理解:读未提交值、同一行两次读不同、同一谓词集合变化分别对应不同可见性问题;规则:隔离级别名称因实现可能有差异,验收应写并发脚本观察允许的历史;并能围绕“库存审计两次查询 quantity<0,中间另一个事务插入异常行,第二次多出一行,这是谓词范围的幻读”给出可执行或可计算的反查。
应覆盖:MVCC 保存行版本,让读者按快照时间选择可见版本;它减少读写阻塞,但不自动消除写偏斜;规则:可见性由版本创建/删除事务与快照决定;跨行不变量需要串行化、显式锁或约束重构;并能围绕“两名医生各看到另一人值班,于是同时取消自己,单行冲突不存在却违反‘至少一人值班’约束”给出可执行或可计算的反查。
应覆盖:死锁由互斥、占有等待、不可剥夺和循环等待共同构成;系统可检测等待图环并选择牺牲者;规则:等待图有环表明死锁;应用重试需回滚完整事务、加入退避并保证幂等;并能围绕“两个事务以相反顺序锁 account 1 和 2 会互等;统一按账户 id 加锁可破坏循环等待”给出可执行或可计算的反查。
应覆盖:选择隔离级别应先列业务不变量和允许历史,再用并发测试证明;更强隔离会带来冲突重试或阻塞成本;规则:正确策略 = 最小足够隔离 + 原子条件写 + 冲突处理 + 并发回归测试;并能围绕“抢最后一张票必须原子条件更新或串行化,浏览商品列表可接受较弱快照;二者不该机械共用一种策略”给出可执行或可计算的反查。