小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

記一次MySQL中Waiting for table metadata lock的解決方法

 思懿 2021-06-05

最近項(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ù)
從 information_schema.innodb_trx 表中查看當(dāng)前未提交的事務(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
trx_started: 事務(wù)執(zhí)行的起始時(shí)間,若時(shí)間較長(zhǎng),則要分析該事務(wù)是否合理
trx_mysql_thread_id: MySQL的線程ID,用于kill
trx_query: 事務(wù)中的sql
一般只要kill掉這些線程,DDL操作就不會(huì)Waiting for table metadata lock。

2. 調(diào)整鎖超時(shí)閾值
lock_wait_timeout 表示獲取metadata lock的超時(shí)(單位為秒),允許的值范圍為1到31536000(1年)。 默認(rèn)值為31536000。詳見(jiàn) https://dev./doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。默認(rèn)值為一年?。?!已哭瞎!將其調(diào)整為30分鐘

set session lock_wait_timeout = 1800;
set global lock_wait_timeout = 1800;

好讓出現(xiàn)該問(wèn)題時(shí)快速故障(failfast)

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多