mysql 數據庫鎖通常處理

MySQL在進行alter table等DDL操做時,有時會出現Waiting for table metadata lock的等待場景。並且,一旦alter table TableA的操做停滯在Waiting for table metadata lock的狀態,後續對TableA的任何操做(包括讀)都沒法進行,由於他們也會在Opening tables的階段進入到Waiting for table metadata lock的鎖等待隊列。若是是產品環境的核心表出現了這樣的鎖等待隊列,就會形成災難性的後果。數據庫

 

show processlist; -- 查看數據庫鎖狀況spa

kill id; -- kill 殺掉當前鎖住的進程orm

select * from information_schema.innodb_trx -- 找到未提交事物的sid, 而後 kill 掉,讓其回滾隊列

select * from performance_schema.events_statements_current -- 查到執行失敗的語句進程

 

 

 

 

 

alter table的語句是很危險的(其實他的危險實際上是未提交事物或者長事務致使的),在操做以前最好確認對要操做的表沒有任何進行中的操做、沒有未提交事務、也沒有顯式事務中的報錯語句。若是有alter table的維護任務,在無人監管的時候運行,最好經過lock_wait_timeout設置好超時時間,避免長時間的metedata鎖等待。事務

相關文章
相關標籤/搜索