MySQL Metadata Lock详解

 

Metadata Lock 的作用:

  要直接说出Metadata Lock 的作用、以我目前的文字功底是不行的、好在我可以通过一个例子来说明。

  假设session 1 在正在执行如下的SQL语句

select * from t ;

  session 2 想要执行 

drop table t;

  drop table t ; 这句SQL是不能得到马上执行的、因为session 1 还用着t表。

 

  Metadata Lock 是为了防止在有dml执行的过程中,有ddl修改dml中用到的对象,所以不管是dml还是ddl

  在执行前都要得到语句所涉及对象的Metadata Lock ;不同的是dml要得到的是S锁、而ddl是X锁。  

   

  上面的例子中通过show processlist 可以看到如下内容

show processlist;
+----+-------------+-----------+--------+---------+------+---------------------------------+------------------+
| Id | User        | Host      | db     | Command | Time | State                           | Info             |
+----+-------------+-----------+--------+---------+------+---------------------------------+------------------+
|  1 | jianglexing | localhost | tempdb | Sleep   |   23 |                                 | NULL             |
|  2 | jianglexing | localhost | tempdb | Query   |   11 | Waiting for table metadata lock | drop table t     |
|  3 | jianglexing | localhost | NULL   | Query   |    0 | starting                        | show processlist |
+----+-------------+-----------+--------+---------+------+---------------------------------+------------------+

 

 

Metadata Lock 的作用范围:

   所在数据库中的对象、如 table、schema、trigger  ... 

 

 

----------------------------------------------------------------------------------------------

 

posted on 2018-03-16 14:55  蒋乐兴的技术随笔  阅读(540)  评论(0编辑  收藏  举报

导航