|
最近項(xiàng)目中的數(shù)據(jù)庫(kù)查詢(xún)經(jīng)常掛起,應(yīng)用程序啟動(dòng)后也報(bào)操作超時(shí)。測(cè)試人員就說(shuō)數(shù)據(jù)庫(kù)又掛了(貌似他們眼中的連接失敗,查詢(xún)無(wú)果都是掛了),通過(guò) show processlist 一看,滿屏都是 Waiting for table metadata lock 狀態(tài)的連接。第一反應(yīng)就是kill掉這些連接,奈何連接實(shí)在太多,實(shí)在kill不過(guò)來(lái),于是重啟服務(wù),貌似重啟果真能解決90%的問(wèn)題,但如果不找到問(wèn)題原因,問(wèn)題也肯定會(huì)再次出現(xiàn)。 在網(wǎng)上查詢(xún)得知MySQL在進(jìn)行一些alter table等DDL操作時(shí),如果該表上有未提交的事務(wù)則會(huì)出現(xiàn) Waiting for table metadata lock ,而一旦出現(xiàn)metadata lock,該表上的后續(xù)操作都會(huì)被阻塞(詳見(jiàn) http://www./infodetail-1151112.html)。所以這個(gè)問(wèn)題需從兩方面解決: 1. 查看未提交事務(wù) select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx\G
(\G作為結(jié)束符時(shí),MySQL Client會(huì)把結(jié)果以列模式展示,對(duì)于列比較長(zhǎng)的表,展示更直觀) 字段意義: trx_state: 事務(wù)狀態(tài),一般為RUNNING 2. 調(diào)整鎖超時(shí)閾值 set session lock_wait_timeout = 1800; set global lock_wait_timeout = 1800; 好讓出現(xiàn)該問(wèn)題時(shí)快速故障(failfast)
|
|
|
來(lái)自: 思懿 > 《待分類(lèi)》