atitit查詢表修改表欄位沒反應--解鎖鎖定的表

來源:互聯網
上載者:User


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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.