1. DDL 与并发查询的冲突,长事务持有元数据锁导致 DDL 阻塞?
说明长事务持有元数据锁导致 DDL 阻塞的问题?
- 元数据锁
- DDL 阻塞
- 长事务
DDL 需要获得元数据锁。MySQL 中 DML 持有元数据共享锁,DDL 需排他元数据锁;若存在长事务持续持有共享锁,DDL 会一直等待,导致 ALTER/DROP 阻塞。PostgreSQL 中 DDL 需 ACCESS EXCLUSIVE 锁,同样会被并发查询阻塞。
长事务 + 未提交查询会阻塞 DDL,造成"改表失败"等事故。需监控长事务并设置 lock_timeout。