mysql學習day3

mysql的鎖
根據加鎖范圍:MySQL里面的鎖可以分為:全局鎖、表級鎖鳞青、行級
一臂拓、全局鎖:
對整個數據庫實例加鎖。
MySQL提供加全局讀鎖的方法:Flush tables with read lock(FTWRL)
這個命令可以使整個庫處于只讀狀態(tài)胶惰。使用該命令之后孵滞,數據更新語句坊饶、數據定義語句和更新類事務的提交語句等操作都會被阻塞殴蓬。
使用場景:全庫邏輯備份。
風險:
1.如果在主庫備份根蟹,在備份期間不能更新糟秘,業(yè)務停擺
2.如果在從庫備份球散,備份期間不能執(zhí)行主庫同步的binlog,導致主從延遲
官方自帶的邏輯備份工具mysqldump悲龟,當mysqldump使用參數--single-transaction的時候,會啟動一個事務须教,確保拿到一致性視圖轻腺。而由于MVCC的支持划乖,這個過程中數據是可以正常更新的。一致性讀是好琴庵,但是前提是引擎要支持這個隔離級別误算。
如果要全庫只讀,為什么不使用set global readonly=true的方式迷殿?
1.在有些系統(tǒng)中儿礼,readonly的值會被用來做其他邏輯,比如判斷主備庫庆寺。所以修改global變量的方式影響太大蜘犁。
2.在異常處理機制上有差異。如果執(zhí)行FTWRL命令之后由于客戶端發(fā)生異常斷開止邮,那么MySQL會自動釋放這個全局鎖这橙,整個庫回到可以正常更新的狀態(tài)。而將整個庫設置為readonly之后导披,如果客戶端發(fā)生異常屈扎,則數據庫就會一直保持readonly狀態(tài),這樣會導致整個庫長時間處于不可寫狀態(tài)撩匕,風險較高鹰晨。
二模蜡、表級鎖
MySQL里面表級鎖有兩種,一種是表鎖甥绿,一種是元數據鎖(meta data lock,MDL)
表鎖的語法是:lock tables ... read/write
可以用unlock tables主動釋放鎖共缕,也可以在客戶端斷開的時候自動釋放。lock tables語法除了會限制別的線程的讀寫外,也限定了本線程接下來的操作對象嫉沽。
對于InnoDB這種支持行鎖的引擎,一般不使用lock tables命令來控制并發(fā)玻佩,畢竟鎖住整個表的影響面還是太大。
MDL:不需要顯式使用,在訪問一個表的時候會被自動加上兜蠕。
MDL的作用:保證讀寫的正確性。
在對一個表做增刪改查操作的時候晶府,加MDL讀鎖;當要對表做結構變更操作的時候,加MDL寫鎖。
讀鎖之間不互斥骡苞。讀寫鎖之間,寫鎖之間是互斥的躲株,用來保證變更表結構操作的安全性。
MDL 會直到事務提交才會釋放,在做表結構變更的時候磨德,一定要小心不要導致鎖住線上查詢和更新。
三搔弄、行鎖
兩階段鎖:在 InnoDB 事務中,行鎖是在需要的時候才加上的炫刷,但并不是不需要了就立刻釋放顾彰, 而是要等到事務結束時才釋放筋搏。
建議:如果你的事務中需要鎖多個行,要把最可能造成鎖沖突髓迎、最可能影響并發(fā)度的鎖盡量往后放。
死鎖:當并發(fā)系統(tǒng)中不同線程出現循環(huán)資源依賴,涉及的線程都在等待別的線程釋放資源時挣郭,就會導致這幾個線程都進入無限等待的狀態(tài)蕉汪。
解決方案:
1、通過參數 innodb_lock_wait_timeout 根據實際業(yè)務場景來設置超時時間,InnoDB引擎默認值是50s算利。
2、發(fā)起死鎖檢測慕的,發(fā)現死鎖后蚂蕴,主動回滾死鎖鏈條中的某一個事務骡楼,讓其他事務得以繼續(xù)執(zhí)行篮条。將參數 innodb_deadlock_detect 設置為 on伴栓,表示開啟這個邏輯(默認是開啟狀態(tài))饺窿。
如何解決熱點行更新導致的性能問題忍宋?
1入宦、如果你能確保這個業(yè)務一定不會出現死鎖涯肩,可以臨時把死鎖檢測關閉掉硫朦。一般不建議采用
2泽裳、控制并發(fā)度瀑梗,對應相同行的更新铺纽,在進入引擎之前排隊其馏。這樣在InnoDB內部就不會有大量的死鎖檢測工作了咖耘。
3、將熱更新的行數據拆分成邏輯上的多行來減少鎖沖突,但是業(yè)務復雜度可能會大大提高谤民。
innodb行級鎖是通過鎖索引記錄實現的,如果更新的列沒建索引是會鎖住整個表的。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖盏混,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件预愤,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機冗栗,發(fā)現死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乒融,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵禾进,是天一觀的道長宠纯。 經常有香客問我,道長马澈,這世上最難降的妖魔是什么涤伐? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任馒胆,我火速辦了婚禮,結果婚禮上凝果,老公的妹妹穿的比我還像新娘祝迂。我一直安慰自己,他們只是感情好器净,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布型雳。 她就那樣靜靜地躺著,像睡著了一般山害。 火紅的嫁衣襯著肌膚如雪四啰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天粗恢,我揣著相機與錄音柑晒,去河邊找鬼。 笑死眷射,一個胖子當著我的面吹牛匙赞,可吹牛的內容都是我干的。 我是一名探鬼主播妖碉,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涌庭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欧宜?” 一聲冷哼從身側響起坐榆,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冗茸,沒想到半個月后席镀,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡夏漱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年豪诲,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挂绰。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎篱,死狀恐怖,靈堂內的尸體忽然破棺而出葵蒂,到底是詐尸還是另有隱情交播,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布践付,位于F島的核電站秦士,受9級特大地震影響,放射性物質發(fā)生泄漏荔仁。R本人自食惡果不足惜伍宦,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一芽死、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧次洼,春花似錦关贵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亥啦,卻和暖如春炭剪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翔脱。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工奴拦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人届吁。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓错妖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疚沐。 傳聞我的和親對象是個殘疾皇子暂氯,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容