日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本篇文章給大家帶來了關于mysql的相關知識,MySQL有一個把鎖,叫做MDL元數據鎖,當對表修改的時候,會自動給表加上這把鎖,也就是不需要自己顯式使用,下面介紹一下MySQL數據庫線上修改表結構的方法,希望對大家有幫助。


MySQL數據庫線上修改表結構的方法


一、MDL元數據鎖

在修改表結構之前,先來看下可能存在的問題。

1、什么是MDL鎖

MySQL有一個把鎖,叫做MDL元數據鎖,當對表修改的時候,會自動給表加上這把鎖,也就是不需要自己顯式使用。

當對表做增刪改查的時候,加的是MDL讀鎖

當對表結構做變更修改的時候,加的是MDL寫鎖

讀與讀之間不互斥,讀與寫,寫與寫之間互斥,因此

當有一個線程對表執行增刪蓋茶的時候,會阻塞掉別的線程對表結構修改的請求

當有一個線程對表結構修改的時候,會阻塞掉別的線程對表增刪改查的請求

2、MDL鎖的問題

并且MDL一旦上鎖之后,只有當前請求的事務提交才會釋放,如果是一個長事務,或者是線上數據量很大,修改表結構默認上了MDL寫鎖,會很耗時一直阻塞掉后邊其他請求。

想象一種場景,A(select),B(alter), C(select),D(select).....分別為按照順序對MySQL同一張表的請求,這些請求會形成一個隊列。

當A(select)獲取表的MDL讀鎖之后,就會阻塞掉B(alter),因為B要加的是MDL寫鎖,B被阻塞掉之后,就會導致后邊等待隊列中的其他請求都被阻塞掉,最終造成Mysql的可用連接耗盡,請求超時等問題。

二、如何線上修改MySQL表結構

鑒于以上MDL鎖,得知對表做alter修改結構很會阻塞掉其他的正常請求,所以修改操作要放在非業務高峰期來做,一般是放到凌晨2-4點。

具體步驟:

對表加讀寫鎖,使得此時表只讀、

復制原表的物理結構

修改新表的物理結構,包括增加新字段或者修改其他表結構

把表結構導入新表,數據同步完成,鎖住中間表,刪除原表

將新表rename為原表名

釋放鎖

以上方案的問題是,數據量很大的時候,數據都導入需要時間,這個過程中,服務是不可訪問的。

改進:


MySQL數據庫線上修改表結構的方法


新建一張表 A_new,其比原表多了幾個字段,通過數據訂閱的方式訂閱原表A,把線上的表A中的數據同步到這個新建的表A_new中,這個過程會一直持續,并且這個過程中表A是可以增刪改查的,總有一個時刻,這兩張表的數據是完全同步的,數據上是沒有任何差異的,這個時候把原表表名A給修改掉,把新表A_new修改為原表A,這個操作是一個短暫操作,可以瞬間完成,不會有很大影響。

優缺點:

好處是同步的過程不會影響原有的業務正常。

缺點是過程中需要額外一倍的存儲空間去存儲這個新表,當rename完成之后,可以把老表刪掉。


分享到:
標簽:MySQL數據庫 MySQL線上修改表結構
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定