atitit查询表修改表字段没反应--解锁锁定的表

atitit查询表修改表字段没反应--解锁锁定的表



查询表修改表字段没反应



要是使用gui 没反应,最好使用cmd 方式,不卉不个gui 锁上..

ALTER TABLE t_mb_awardweixin  MODIFY  awardChoiceNumLeft int(11) DEFAULT NULL



#-----分析..



1.首先,查询by另一个表格,  要是能查询,显示不是max conn的问题..也许表格锁定了..

2. show full PROCESSLIST  要是看到个Waiting for table metadata lock

 3. 查询锁上的表格.  show OPEN TABLES where In_use > 0;

 

 

作者 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax





#---------原因MDL:::



一个没提交的事务使用了A表, 另外一个session 对A表进行alter,出现waiting for table metadata lock



在insert into t select * from share 运行时, 同时执行alter table t add index(play_count),

alter table语句会Waiting for table metadata lock, 直到insert into … select 语句结束。



 

概述



随着5.5.3引入MDL,更多的Query被“Waiting for table metadata lock”给'炕'了

SHOW PROCESSLIST的输出也有之前的"Locked"变得粒度更加细的'Waiting for table metadata lock'

引入MDL,当需要访问、修改表结构时,都需要对元数据上锁(读/写)

MDL在Server层,保护表数据结构,而非数据本身。Server比之前版本繁忙多了



MDL意味着DDL,一旦DDL被阻塞,那么面向该表的所有Query都会被挂起,包括Select,不过5.6作了改进,5.5可通过参数控制



3.应用中使用了连接池..但是又要ddl...连接池老是连续start 有些conn, kill李韩式有自动开始..造成后面儿ddl 不能执行..





 

 

 #----解决

 1. 设置lock_wait_timeout=50   ,默认1年..  仅仅下一次时间生效..当前只有kill 才可以解决..

 2. kill  锁上 conn   ( DDM alter 的query sql)  ,,,,别的query 事务奏能连续兰..

 3. 对付连接池, 可以设置timeout自动关闭连接.. 但是要重启生效..要是应用重要性,不能重启,可以使用防火墙阻止java进程 访问网络...  批处理kill id ,, 查看一下,应该不会自动连接池连接上了,,,在ddl操作,在放开.....

 

 

 #----结论:

在准备alter table tbl 的时候,先观察一下,有没有正在运行的,且在短时间内无法结束的sql语句在操作tbl表

结论:



当需要对"热表"做DDL,需要特别谨慎,否则,容易造成MDL等待,导致连接耗尽或者拖垮Server



参考

mysql出现Waiting for table metadata lock的原因及解决方案 - mysql数据库栏目 - 红黑联盟.htm

imptt 初步认知MySQL metadata lock(MDL) - DBA@DevOps - 博客频道 - CSDN.NET.htm

上一篇:MyBatis两张表字段名相同产生的问题


下一篇:Android获取手机设备识别码(IMEI)和手机号码