最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL出現(xiàn)Waiting for table metadata lock的原因方法

 更新時間:2019年05月12日 09:59:58   投稿:laozhang  
在本篇內(nèi)容里小編給大家整理了MySQL出現(xiàn)Waiting for table metadata lock的原因以及解決方法對此有需要的朋友們學(xué)習(xí)下。

MySQL在進(jìn)行alter table等DDL操作時,有時會出現(xiàn)Waiting for table metadata lock的等待場景。而且,一旦alter table TableA的操作停滯在Waiting for table metadata lock的狀態(tài),后續(xù)對TableA的任何操作(包括讀)都無法進(jìn)行,因為他們也會在Opening tables的階段進(jìn)入到Waiting for table metadata lock的鎖等待隊列。如果是產(chǎn)品環(huán)境的核心表出現(xiàn)了這樣的鎖等待隊列,就會造成災(zāi)難性的后果。

造成alter table產(chǎn)生Waiting for table metadata lock的原因其實(shí)很簡單,一般是以下幾個簡單的場景:

場景一:長事物運(yùn)行,阻塞DDL,繼而阻塞所有同表的后續(xù)操作

通過show processlist可以看到TableA上有正在進(jìn)行的操作(包括讀),此時alter table語句無法獲取到metadata 獨(dú)占鎖,會進(jìn)行等待。

這是最基本的一種情形,這個和mysql 5.6中的online ddl并不沖突。一般alter table的操作過程中(見下圖),在after create步驟會獲取metadata 獨(dú)占鎖,當(dāng)進(jìn)行到altering table的過程時(通常是最花時間的步驟),對該表的讀寫都可以正常進(jìn)行,這就是online ddl的表現(xiàn),并不會像之前在整個alter table過程中阻塞寫入。(當(dāng)然,也并不是所有類型的alter操作都能online的,具體可以參見官方手冊:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html)
處理方法: kill 掉 DDL所在的session.

場景二:未提交事物,阻塞DDL,繼而阻塞所有同表的后續(xù)操作

通過show processlist看不到TableA上有任何操作,但實(shí)際上存在有未提交的事務(wù),可以在 information_schema.innodb_trx中查看到。在事務(wù)沒有完成之前,TableA上的鎖不會釋放,alter table同樣獲取不到metadata的獨(dú)占鎖。

處理方法:通過 select * from information_schema.innodb_trx\G, 找到未提交事物的sid, 然后 kill 掉,讓其回滾。

場景三:

通過show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也沒有任何進(jìn)行中的事務(wù)。這很可能是因為在一個顯式的事務(wù)中,對TableA進(jìn)行了一個失敗的操作(比如查詢了一個不存在的字段),這時事務(wù)沒有開始,但是失敗語句獲取到的鎖依然有效,沒有釋放。從performance_schema.events_statements_current表中可以查到失敗的語句。

官方手冊上對此的說明如下:

If the server acquires metadata locks for a statement that is syntactically valid but fails during execution, it does not release the locks early. Lock release is still deferred to the end of the transaction because the failed statement is written to the binary log and the locks protect log consistency.

也就是說除了語法錯誤,其他錯誤語句獲取到的鎖在這個事務(wù)提交或回滾之前,仍然不會釋放掉。because the failed statement is written to the binary log and the locks protect log consistency 但是解釋這一行為的原因很難理解,因為錯誤的語句根本不會被記錄到二進(jìn)制日志。

處理方法:通過performance_schema.events_statements_current找到其sid, kill 掉該session. 也可以 kill 掉DDL所在的session.

總之,alter table的語句是很危險的(其實(shí)他的危險其實(shí)是未提交事物或者長事務(wù)導(dǎo)致的),在操作之前最好確認(rèn)對要操作的表沒有任何進(jìn)行中的操作、沒有未提交事務(wù)、也沒有顯式事務(wù)中的報錯語句。如果有alter table的維護(hù)任務(wù),在無人監(jiān)管的時候運(yùn)行,最好通過lock_wait_timeout設(shè)置好超時時間,避免長時間的metedata鎖等待。

相關(guān)文章

  • 簡單了解添加mysql索引的3條原則

    簡單了解添加mysql索引的3條原則

    這篇文章主要介紹了簡單了解添加mysql索引的3條原則,如果表中查詢的列有一個索引,MySQL能快速到達(dá)一個位置去搜尋到數(shù)據(jù)文件的中間,沒有必要看所有數(shù)據(jù),需要的朋友可以參考下
    2019-06-06
  • win2008下mysql8.0.11升級mysql8.0.17版本詳細(xì)步驟

    win2008下mysql8.0.11升級mysql8.0.17版本詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了win2008下mysql8.0.11升級mysql8.0.17版本詳細(xì)步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • mysql允許遠(yuǎn)程連接的方法

    mysql允許遠(yuǎn)程連接的方法

    這篇文章主要介紹了mysql允許遠(yuǎn)程連接的方法,內(nèi)容很詳細(xì),感興趣的小伙伴們可以參考一下
    2015-12-12
  • 教你如何在Mac上安裝mysql數(shù)據(jù)庫

    教你如何在Mac上安裝mysql數(shù)據(jù)庫

    本文給大家詳細(xì)介紹了如何在Mac上安裝mysql數(shù)據(jù)庫的方法,非常的細(xì)致,有需要的小伙伴可以參考下
    2018-05-05
  • mysql數(shù)據(jù)庫是做什么的

    mysql數(shù)據(jù)庫是做什么的

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql數(shù)據(jù)庫是做什么的先關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Mysql中json類型查詢方法示例

    Mysql中json類型查詢方法示例

    這篇文章主要給大家介紹了關(guān)于Mysql中json類型查詢的相關(guān)資料,在MySQL中可以使用一些函數(shù)和操作符來查詢JSON字段,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • mysql增加外鍵約束具體方法

    mysql增加外鍵約束具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql增加外鍵約束具體方法及相關(guān)實(shí)例內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • MySql 5.7.20安裝及data和my.ini文件的配置

    MySql 5.7.20安裝及data和my.ini文件的配置

    本文通過圖文并茂的形式給大家介紹了MySql 5.7.20安裝及data和my.ini文件的配置方法,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2017-11-11
  • MySQL字段類型全面解讀

    MySQL字段類型全面解讀

    這篇文章主要介紹了MySQL字段類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL按月自動設(shè)置表分區(qū)的實(shí)現(xiàn)

    MySQL按月自動設(shè)置表分區(qū)的實(shí)現(xiàn)

    本文主要介紹了MySQL按月自動設(shè)置表分區(qū)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08

最新評論

石首市| 大冶市| 闽侯县| 陵水| 和龙市| 大庆市| 北京市| 成安县| 海南省| 新平| 彭泽县| 富蕴县| 丰镇市| 商丘市| 黄平县| 策勒县| 延寿县| 青州市| 夹江县| 定结县| 同德县| 鄯善县| 甘洛县| 清丰县| 靖州| 桐梓县| 伊宁县| 万全县| 河源市| 太湖县| 西吉县| 乌海市| 贵州省| 宁蒗| 迁安市| 曲阜市| 车险| 巴彦县| 措勤县| 香港 | 余姚市|