# 1. MySQL InnoDB 表锁,IS、IX、S、X 模式与意向锁? A 意向锁直接锁住数据行 B 意向锁之间互斥 C IS/IX 意向锁表示加行锁的意图,帮助表锁与行锁协同判断 ✓ 正确答案 D InnoDB 没有表级锁
# 2. MySQL 中 metadata lock 等待链,长事务导致 ALTER TABLE 卡住? A ALTER TABLE 不需要 MDL B MDL 只影响读操作,不影响 DDL C 长事务持有 MDL 共享锁会导致 ALTER TABLE 等待排他锁而卡住 ✓ 正确答案 D 长事务会加速 DDL 执行
# 3. PostgreSQL 中 advisory lock(咨询锁)的应用? A advisory lock 是数据库行锁,锁具体数据 B advisory lock 无需释放 C advisory lock 只能由数据库内部使用 D advisory lock 由应用自行约定语义,用于多进程协调,如定时任务互斥 ✓ 正确答案
# 4. PostgreSQL 中表级锁,ACCESS EXCLUSIVE、SHARE、EXCLUSIVE 模式? A 所有表锁相互兼容 B SELECT 获取 ACCESS EXCLUSIVE 锁 C ACCESS EXCLUSIVE 是最严格的锁,与所有其他锁冲突 ✓ 正确答案 D SHARE 锁与其他锁都不冲突
# 5. 元数据锁(Metadata Lock),DDL 与 DML 之间的锁协调? A DML 持 MDL 排他锁,DDL 持共享锁 B DML 持 MDL 共享锁,DDL 需排他锁,二者冲突协调 DDL 与 DML ✓ 正确答案 C MDL 只影响读操作 D DDL 与 DML 互不影响
# 8. PostgreSQL 的 DDL 具备事务性(可回滚)而 MySQL 的 DDL 会隐式提交,这一差异对 Online DDL 失败恢复与主从复制分别意味着什么? A PostgreSQL DDL 可回滚,MySQL DDL 隐式提交不可回滚 ✓ 正确答案 B 两者 DDL 都可回滚 C 两者 DDL 都隐式提交 D 只有 MySQL 的 DDL 可回滚
# 9. 主库执行 DDL 后在从库重放时同样需要获取元数据锁,为什么从库上的长查询会阻塞 DDL 重放并拖慢复制?如何缓解? A 从库重放 DDL 不需元数据锁 B 从库长查询持有 MDL 共享锁会阻塞 DDL 重放,拖慢复制 ✓ 正确答案 C 从库 DDL 重放不会阻塞 D 复制延迟与 DDL 无关
# 10. MySQL 的 MDL(Metadata Lock)类型(SHARED、EXCLUSIVE 等)与 Online DDL 分阶段降级机制,为什么 ADD COLUMN 可以做到不阻塞 DML? A Online DDL 分阶段通过锁降级,ADD COLUMN 在构建阶段与 DML 兼容 ✓ 正确答案 B ADD COLUMN 全程持有排他锁阻塞 DML C MDL 只有一种类型 D Online DDL 不涉及 MDL
# 11. PostgreSQL 表锁强度矩阵(ACCESS SHARE → ACCESS EXCLUSIVE)中哪些组合互相冲突?SELECT 与 VACUUM、ALTER TABLE 的兼容性如何? A VACUUM 与 ALTER TABLE 都兼容 SELECT B SELECT 与 ALTER TABLE 兼容 C SELECT 与 VACUUM 兼容,与 ALTER TABLE 冲突 ✓ 正确答案 D 所有表锁都相互冲突
# 12. 为什么 autovacuum 会与 DDL 或长查询互相阻塞?如何用 lock_timeout、分区滚动维护与 maintenance_work_mem 缓解? A autovacuum 获取的锁与所有操作兼容 B autovacuum 获取 SHARE UPDATE EXCLUSIVE,与部分 DDL 冲突,可用 lock_timeout 和分区滚动缓解 ✓ 正确答案 C autovacuum 不获取任何表锁 D 缓解只能靠重启
# 13. MyISAM 表锁与 InnoDB 行锁在并发读写、读写互斥与崩溃恢复上的历史差异,为什么现代系统普遍弃用 MyISAM? A MyISAM 用行锁、支持读写并发 B MyISAM 用表锁、读写互斥且无崩溃恢复,InnoDB 行锁支持并发并有崩溃恢复 ✓ 正确答案 C 两者锁机制相同 D InnoDB 读写互斥
# 14. LOCK TABLE 的语法与锁模式,ACCESS SHARE 到 ACCESS EXCLUSIVE 与 DDL/查询的互斥关系,什么场景应显式加表锁而非依赖行锁? A LOCK TABLE 锁粒度比行锁小 B LOCK TABLE 不影响并发 C 需要跨表或全表一致性、防并发读写时,应显式加表锁 ✓ 正确答案 D 行锁总能替代表锁
# 15. 外键约束的增删为何需要独占元数据锁?Inplace 校验外键期间与 DML 的并发边界在哪里? A 外键增删需独占 MDL,Inplace 校验外键期间会阻塞 DML ✓ 正确答案 B 外键增删不需要元数据锁 C Inplace 校验外键不阻塞任何操作 D 外键增删与 DML 无并发边界
# 16. MySQL 的 LOCK TABLES/UNLOCK TABLES 语句何时仍有用(批量维护、MyISAM 迁移)?它与行锁、MDL 的叠加关系? A 批量维护与 MyISAM 迁移时仍有用,且与行锁、MDL 叠加一起生效 ✓ 正确答案 B LOCK TABLES 只锁行,不锁表 C LOCK TABLES 不影响其他事务 D LOCK TABLES 与 MDL 无关
# 17. MySQL 表锁与 DDL 的关系,Online DDL 如何减少锁表影响? A Online DDL 全程锁表 B Online DDL 不涉及 MDL C Online DDL 与普通 DDL 无区别 D Online DDL 分阶段锁降级,只在 commit 阶段短暂加排他锁,减少锁表影响 ✓ 正确答案
# 18. 表锁 vs 行锁,MyISAM 与 InnoDB 的锁粒度差异? A MyISAM 用行锁,InnoDB 用表锁 B 表锁粒度大、并发低、开销小;行锁粒度小、并发高、开销大 ✓ 正确答案 C 两者锁粒度相同 D 行锁粒度大于表锁
# 19. 崩溃恢复后数据库为什么不会残留任何锁?锁的持有与释放如何与事务提交或回滚绑定? A 崩溃后锁会残留,需手动清除 B 崩溃恢复不会释放锁 C 锁是持久化的,崩溃后仍存在 D 锁随事务提交/回滚释放,崩溃恢复回滚未提交事务后无锁残留 ✓ 正确答案