元数据与表锁

共 19 题
#

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 互不影响
#

6. 表锁(Table Lock)的语义,锁定整张表的所有操作?

A 表锁只锁一行记录
B 表锁不影响其他事务
C 表锁与行锁粒度相同
D 表锁锁定整张表,粒度大、并发度低但开销小 ✓ 正确答案
#

7. 行锁与表锁的协同,InnoDB 的意向锁协议?

A 表锁与行锁互不相关
B 意向锁直接锁住数据行
C 加行锁前必须先加意向锁,帮助表锁感知行锁存在 ✓ 正确答案
D 加表锁不需要检查意向锁
#

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 锁随事务提交/回滚释放,崩溃恢复回滚未提交事务后无锁残留 ✓ 正确答案