最近更新时间:2021-01-06 18:05:13
MySQL为了在并发环境下维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。因此 MySQL 引入了 metadata lock ,来保护表的元数据信息。
支持事务的 InnoDB 引擎表和 不支持事务的 MyISAM 引擎表,都会出现 metadata lock wait 等待现象。一旦出现 metadata lock wait 等待现象,后续所有对该表的访问都会阻塞在该等待上,导致连接堆积,业务受影响。
因此在对表进行上述操作时,如果表上有活动事务(未提交或回滚),请求写入的会话会等待在 metadata lock wait,会导致metadata lock wait出现的场景有:
1.创建、删除索引。
2.修改表结构、删除表。
3.获取表上表级写锁 (lock table tab_name write)。
show processlist 查看会话有长时间未完成的查询,使用kill 命令终止该查询。
出现长时间 metadata lock wait 会导致表上相关查询阻塞,影响业务。我们需要尽量避免类此情况。
在业务低峰期执行创建表、修改表,或者创建索引等操作。
纯净模式