事务监控与死锁

共 20 题
#

1. 事务历史的分析,pg_stat_statements、performance_schema?

A performance_schema 只记录磁盘。
B 两者功能相同。
C pg_stat_statements 统计语句执行,performance_schema 记录事务与事件。 ✓ 正确答案
D pg_stat_statements 只记录连接。
#

2. 事务等待图的监控,pg_locks、lock_wait_timeout?

A 锁等待图无法监控。
B pg_locks/data_lock_waits 可构建锁等待图,lock_timeout 控制锁等待超时。 ✓ 正确答案
C lock_timeout 控制语句执行。
D pg_locks 不显示锁。
#

3. 事务回滚率(Rollback Rate)的监控?

A 高回滚率通常提示事务冲突频繁或逻辑错误,应监控告警。 ✓ 正确答案
B 回滚率与事务健康无关。
C 高回滚率是正常现象。
D 回滚率无法计算。
#

4. performance_schema 的事务表?

A 事务表不记录耗时。
B performance_schema 无事务表。
C 事务表只记录连接。
D events_transactions_current/history 记录事务状态、耗时与关联语句。 ✓ 正确答案
#

5. InnoDB 在不同隔离级别下的加锁策略有何差异(READ COMMITTED 基本禁用 Gap Lock、REPEATABLE READ 用 Next-Key Lock 防幻读)?同一条 SQL 为何加锁范围不同?

A RC 基本禁用 Gap Lock,RR 用 Next-Key Lock 防幻读,锁范围更大。 ✓ 正确答案
B 两级别加锁完全相同。
C RC 用 Next-Key Lock。
D RR 禁用间隙锁。
#

6. InnoDB 在 RR 下对普通索引范围查询的加锁规则(向后加锁直到第一个不满足条件的记录及其间隙)是怎样的?与唯一索引等值命中/未命中时的加锁有何差异?

A 所有查询都锁整张表。
B 普通索引范围查询锁范围及右边界间隙,唯一索引等值命中只锁记录、未命中锁间隙。 ✓ 正确答案
C 唯一索引等值命中锁间隙。
D 普通索引范围查询不锁间隙。
#

7. 如何解读 SHOW ENGINE INNODB STATUS 的 LATEST DETECTED DEADLOCK 段(两个事务各自持有与等待的锁、回滚方)?据此如何给出索引设计或事务顺序的改造方案?

A 死锁段无法解读。
B LATEST DETECTED DEADLOCK 显示两事务的持锁、等待与回滚方,据此可设计索引与加锁顺序。 ✓ 正确答案
C 死锁与加锁顺序无关。
D 死锁段不显示回滚方。
#

8. InnoDB 为什么引入意向锁(IS/IX)?加表锁时“先查意向锁再决定”的两级判定如何避免逐行扫描,从而让表锁与行锁高效共存?

A 意向锁标记表级加锁意图,加表锁时查意向锁避免逐行扫描。 ✓ 正确答案
B 意向锁需要逐行扫描。
C 意向锁与表锁无关。
D InnoDB 无意向锁。
#

9. SELECT ... FOR UPDATE NOWAIT 与 SKIP LOCKED 分别如何避免排队等待?各自的典型应用(立即失败快速返回 vs 任务队列领取)是什么?

A NOWAIT 遇到锁立即失败,SKIP LOCKED 跳过锁行,适合任务队列领取。 ✓ 正确答案
B 两者都等待锁。
C NOWAIT 适合任务队列。
D SKIP LOCKED 遇到锁立即失败。
#

10. 长事务的发现与监控(pg_locks / information_schema.innodb_trx)的工程实践

A 长事务无法定期监控。
B 用 pg_stat_activity/innodb_trx 的开始时长与锁信息识别长事务,定期监控告警。 ✓ 正确答案
C 只需看 CPU 就能发现长事务。
D 长事务不需要监控。
#

11. READ COMMITTED 下的半一致性读(semi-consistent read,对不满足 WHERE 的已锁行提前释放锁)如何减少锁冲突?它与语句级复制安全有何关系?

A 半一致性读对已锁行一律阻塞。
B 半一致性读对不满足 WHERE 的已锁行提前释放锁,减少锁冲突。 ✓ 正确答案
C 半一致性读与 RC 无关。
D 半一致性读增加锁冲突。
#

12. 死锁牺牲者选择在 MySQL(按 undo 量等代价回滚较小事务)与 PostgreSQL(终止当前检测到死锁的后端、报 40P01)上有何差异?应用应如何重试?

A PostgreSQL 报 1213。
B 两者牺牲者选择相同。
C 死锁无需重试。
D MySQL 回滚 undo 较小的牺牲者,PostgreSQL 报 40P01,应用需捕获并重试。 ✓ 正确答案
#

13. 统一锁获取顺序、缩短事务持锁时间为何能降低死锁概率?这与死锁四个必要条件(互斥、持有并等待、不可剥夺、循环等待)如何对应?

A 缩短持锁无法降低死锁概率。
B 统一顺序只影响互斥。
C 统一加锁顺序打破循环等待,缩短持锁时间减少死锁窗口。 ✓ 正确答案
D 死锁四条件无关。
#

14. PostgreSQL 通过 xmax 实现的元组锁(无间隙锁、无锁升级)与 InnoDB 基于索引加锁的本质差异是什么?

A PostgreSQL 有间隙锁。
B 两者都基于索引加锁。
C PostgreSQL 用 xmax 锁元组无间隙锁,InnoDB 基于索引加记录/间隙锁。 ✓ 正确答案
D InnoDB 用 xmax 锁元组。
#

15. pg_stat_activity 的关键字段?

A pg_stat_activity 的 state、xact_start、query、wait_event 用于会话与事务监控。 ✓ 正确答案
B pg_stat_activity 只显示连接数。
C 该视图不显示事务开始时间。
D 该视图无法显示等待事件。
#

16. 锁等待超时与死锁检测的配合,innodb_lock_wait_timeout 的作用边界、死锁检测开关(innodb_deadlock_detect)在大并发下的开销,何时关闭?

A 关闭死锁检测后锁等待无兜底。
B 死锁检测无开销。
C innodb_lock_wait_timeout 兜底锁等待,innodb_deadlock_detect 主动检测但大并发下开销大。 ✓ 正确答案
D lock_wait_timeout 只影响死锁。
#

17. 事务监控的告警设计,长事务、锁等待、回滚率与死锁次数的阈值与告警分级,如何从趋势中预判锁竞争恶化?

A 趋势分析无用。
B 只设单一阈值即可。
C 长事务、锁等待、回滚率、死锁次数设阈值分级告警,从趋势预判锁竞争恶化。 ✓ 正确答案
D 死锁次数无法监控。
#

18. 慢事务的定位与优化,如何从事务粒度(开始时间、持锁时间、语句耗时)拆解慢事务,与慢查询日志的配合?

A 从开始时间、持锁时间、语句耗时拆解慢事务,配合慢查询日志定位瓶颈。 ✓ 正确答案
B 慢事务只需看总耗时。
C 慢查询日志与事务无关。
D 持锁时间无法分析。
#

19. 死锁的应用层应对,重试机制(retry with backoff)、事务瘦身与统一加锁顺序如何落地,重试的幂等性如何保证?

A 重试无需退避。
B 死锁用 retry with backoff 重试、事务瘦身、统一加锁顺序,并用唯一键保证幂等。 ✓ 正确答案
C 事务瘦身增加死锁概率。
D 重试不保证幂等。
#

20. 主动死锁检测 vs 锁等待超时的策略对比

A 两者不能同时启用。
B 主动检测无开销。
C 超时响应比主动检测快。
D 主动死锁检测响应快但开销大,锁等待超时简单但响应慢,可配合使用。 ✓ 正确答案