什么是MDLMDL,Meta Data lock,元数据锁,一般称为字典锁。字典锁与数据锁相对应。字典锁是为了保护数据对象被改变,一般是一些DDL会对字典对象改变,如两个事物,事物1先查询表,然后事物2试图
什么是MDL
MDL,Meta Data lock,元数据锁,一般称为字典锁。字典锁与数据锁相对应。字典锁是为了保护数据对象被改变,一般是一些DDL会对字典对象改变,如两个事物,事物1先查询表,然后事物2试图alter,其首先需要等待事物1结束(提交或回滚),此时的状态便是Waiting for table metadata lock,然后才能获得字典锁。后续对TableA的任何操作(包括读)都无法进行,也会在Opening tables的阶段进入Waiting for table metadata lock的队列。如果是线上业务的核心表出现了这样的锁等待队列,就会造成灾难性的后果。数据锁是保护表中的数据,如两个事物同时更新一行时,先得到row lock的事务会先执行,后者只能等待。
出现的情况:
场景一:
通过show processlist可以看到TableA上有正在进行的操作(包括读),此时alter table语句无法获取到metadata 独占锁,会进行等待。出现Waiting for table metadata lock
场景二:
通过show processlist看不到TableA上有任何操作,但实际上存在有未提交的事务,可以infORMation_schema.innodb_trx中查看到。在事务没有完成之前,TableA上的锁不会释放,alter table同样获取不到metadata的独占锁。
场景三:
通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中的事务。这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效。从performance_schema.events_statements_current表中可以查到失败的语句。
--结束END--
本文标题: mysql 元数据锁 Meta Data lock
本文链接: https://lsjlt.com/news/37663.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0