热点行与并发控制

共 18 题
#

1. MySQL 8.0 SKIP LOCKED 的支持?

A MySQL 8.0 不支持 SKIP LOCKED
B SKIP LOCKED 跳过被其他事务锁定的行而非等待,适合任务队列等场景 ✓ 正确答案
C SKIP LOCKED 会等待锁释放
D SKIP LOCKED 只用于快照读
#

2. PostgreSQL SKIP LOCKED 语法(9.5+)的应用,任务队列?

A 只用于 MySQL
B 多个 worker 用 FOR UPDATE SKIP LOCKED 各取不同行,避免锁竞争与重复领取 ✓ 正确答案
C SKIP LOCKED 会阻塞等待
D 任务队列必须用外部 MQ
#

3. 热点行更新的解决,应用层队列、Redis 预扣减、版本号、CAS?

A 只能靠数据库行锁
B 热点行无法解决
C 应用层队列串行化、Redis 预扣减分担、版本号/CAS 乐观冲突可降低单行写竞争 ✓ 正确答案
D 版本号无法用于热点行
#

4. 热点行(Hot Row)更新的竞争,秒杀、库存扣减、计数器?

A 热点行只有一个请求写
B 热点行竞争不影响性能
C 秒杀/库存/计数器都集中写同一行,行锁排队与锁竞争成为瓶颈 ✓ 正确答案
D 行锁能完全解决热点竞争
#

5. READ COMMITTED 下 UPDATE 的当前读语义?

A UPDATE 是快照读
B UPDATE 读到未提交数据
C UPDATE 读取最新已提交数据并加记录锁(RC 下不加间隙锁) ✓ 正确答案
D UPDATE 不加锁
#

6. READ COMMITTED 下子查询的可重复性?

A RC 下子查询在同一语句内一致,跨语句因每次新建快照而不一定一致 ✓ 正确答案
B 子查询在事务内永远一致
C 子查询与隔离级别无关
D 子查询不一致
#

7. Redis 分布式锁(SETNX)的应用与 Redlock 算法?

A Redlock 与 SETNX 无关
B SETNX 无法实现分布式锁
C 分布式锁不需要过期时间
D SETNX(NX+PX)实现互斥与防死锁,Redlock 在多数实例上获取锁以提升容错 ✓ 正确答案
#

8. 分布式锁的超时与续约(Lease)?

A 锁不需要过期时间
B 续约会造成死锁
C 续约(租约)让持有者在业务执行期间自动续期,避免锁过期导致互斥失效,崩溃则停止续约自动释放 ✓ 正确答案
D 过期时间必须设得极短
#

9. 热点行更新除行锁竞争外,还会争抢 Buffer Pool mutex、页闩锁与 redo log 写入带宽,为什么单纯靠索引或隔离级别无法解决?

A 索引优化可完全解决热点行
B 热点行还会争抢 Buffer Pool mutex、页闩锁与 redo 带宽,需分散热点或串行化解决 ✓ 正确答案
C 热点行只有行锁竞争
D 隔离级别能解决热点行
#

10. 不一致分析(Inconsistent Analysis)的定义,聚合查询期间数据变更导致错误的合计?

A 聚合查询不受并发影响
B 聚合查询期间数据变更导致基于新旧混合数据的错误合计 ✓ 正确答案
C 不一致分析就是死锁
D 聚合查询永远正确
#

11. 任务队列(Task Queue)模式,消息队列 + 异步消费?

A 任务必须同步处理
B 任务队列无法提升吞吐
C 任务队列只用于数据库
D 消息队列存任务、消费者异步处理,实现解耦与削峰,数据库也可用 SKIP LOCKED 实现 ✓ 正确答案
#

12. 应用层幂等性(Idempotency)的实现,幂等键(Idempotency Key)?

A 幂等性无法实现
B 幂等键与重试无关
C 幂等键唯一标识请求,重复请求直接返回首次结果,配合唯一约束防止重复处理 ✓ 正确答案
D 幂等键只用于读
#

13. 不一致分析的解决,快照隔离、SERIALIZABLE、原子更新?

A 无法解决
B 快照隔离、SERIALIZABLE、原子更新分别从读快照、串行化、原子写角度解决 ✓ 正确答案
C 原子更新无法解决问题
D 只能靠应用层
#

14. SKIP LOCKED 的约束冲突?

A 可用于普通快照读
B 仅用于当前读(FOR UPDATE/SHARE),可能返回空集,需应用层处理 ✓ 正确答案
C 遇到锁会报错
D 所有数据库都支持
#

15. 为什么把热点行的并发更新在应用层串行化(单线程队列)有时比依赖数据库行锁吞吐更高?队列化的代价是什么?

A 应用层串行化吞吐更低
B 数据库行锁永远最优
C 队列化无任何代价
D 应用层串行化绕开数据库锁与页竞争,吞吐可能更高,但代价是延迟、队列可靠性、幂等与额外组件 ✓ 正确答案
#

16. 热点行为什么不适合乐观锁?冲突率接近百分之百时重试风暴会放大数据库负载,如何用失败降级与限流保护?

A 热点行适合乐观锁
B 重试不会放大负载
C 热点行冲突率接近 100%,乐观锁重试会放大负载,应串行化并配合限流与失败降级 ✓ 正确答案
D 乐观锁无冲突
#

17. 热点账户余额拆分(多子账户)为什么能降低行锁竞争?拆分与对账如何保证总额正确?

A 拆分会增加行锁竞争
B 多子账户把热点行分散成多行降低竞争,靠流水与对账保证总额正确 ✓ 正确答案
C 拆分后不需对账
D 拆分无法降低竞争
#

18. 分库分表后热点用户仍可能落在单一分片,如何通过二次分片或按用户维度冗余复制解决单分片压力?

A 分库分表天然解决热点
B 热点用户仍集中在单分片,可用二次分片或按用户维度冗余复制分散压力 ✓ 正确答案
C 热点用户无法处理
D 冗余复制不分散压力