
metadata lock怎么出现的?
metadata lock是什么?
metadata lock即MDL,是⽤于保护MySQL内部对象的元数据,MySQL通过MDL保护DDL和
DML的并发。
MDL在MySQL5.5版本引⼊,在此之前MySQL对于元数据的保护仅仅是语句级别的,引⼊
MDL后,MySQL对于元数据的保护上升为事务级别的。
如何避免产⽣很多的 metadata lock?
1.建议在执⾏SQL的时候保证session是autocommit=ON的,⾃动提交可以加快SQL的提交速
度,及时的释放MDL。
2.建议选择业务低峰进⾏数据表结构的更新,这样可以避免MDL的发⽣。
涉及的表:
performanceschema.eventsstatements_current
查这个表可看到每⼀个session正在执⾏的sql,哪怕执⾏完成了,只要没有提交,都会出现。
informationschema.processlist和performanceschema.eventsstatementscurrent如何对应起
来,可以查看performance_schema.threads表来关联:
select d.trx_started ,a.thread_id,b.processlist_id,a.SQL_text from
performance_schema.events_statements_current a join
performance_schema.threads b on a.thread_id=b.thread_id join
information_schema.processlist c on b.processlist_id=c.id join
information_schema.innodb_trx d on c.id=d.trx_mysql_thread_id order by
d.trx_started;
我理解的是,这个语句可以得到 执⾏但未提交的的SQL。
过程重现:
MySQL Server version: 5.7.28
评论