成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

談談MySQL死鎖一-創(chuàng)新互聯(lián)

數(shù)據(jù)越來越和我們的生活離不開,數(shù)據(jù)在生命周期的各個階段有著不同的痛點和需求以及特殊場景。

成都創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計,德令哈網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:德令哈等地區(qū)。德令哈做網(wǎng)站價格咨詢:13518219792

CURD是數(shù)據(jù)的四大基本需求:寫入,更新,讀取,刪除.


今天,來談一談死鎖問題

死鎖是高并發(fā)下MySQL不可回避的一個問題。

這句話可以引申四個問題:

1.什么是死鎖?

2.MySQL什么時候會檢測死鎖?

3.數(shù)據(jù)庫系統(tǒng)如何處理死鎖?

4.有哪些典型的高并發(fā)死鎖場景?


1.我們先來看看什么是死鎖。

在《數(shù)據(jù)庫系統(tǒng)實現(xiàn)》第八章第二節(jié)這樣定義死鎖

并發(fā)執(zhí)行的事務由于競爭資源而到達一個存在死鎖的狀態(tài):若干事務的每一個事務都在等待被其他事務占用的資源,因而每個事務都不能取得進展。

這個描述貌似很拗口,我們舉兩個例子來形象化認識一下:

1.兩位木匠釘?shù)匕澹晃恢晃找话迅^,而另一位沒有榔頭,卻有釘子

2.堵車現(xiàn)象

談談MySQL死鎖 一

看完死鎖的定義描述和形象化認識,那對于MySQL,什么時候會進行死鎖檢測?


2.MySQL的死鎖檢測和回滾

這里談論MySQL的死鎖檢測,目前僅討論InnoDB的處理,暫不涉及MyRocks的死鎖檢測處理。

當InnoDB事務嘗試獲取(請求)加一個鎖,并且需要等待時,InnoDB會進行死鎖檢測.

正常的流程如下:

1.InnoDB的初始化一個事務,當事務嘗試獲取(請求)加一個鎖,并且需要等待時(wait_lock),innodb會開始進行死鎖檢測(deadlock_mark)

2.進入到lock_deadlock_check_and_resolve ,名字很明顯了,要檢測死鎖和解決死鎖

3.檢測死鎖過程中,也是有計數(shù)器來進行限制的

4.死鎖檢測的邏輯之一是等待圖的處理過程,如果通過鎖的信息和事務等待鏈構(gòu)造出一個圖,如果圖中出現(xiàn)回路,就認為發(fā)生了死鎖。

5.死鎖的回滾,內(nèi)部代碼的處理邏輯之一是比較undo的數(shù)量


3.數(shù)據(jù)庫系統(tǒng)如何處理死鎖

我們回頭繼續(xù)看《數(shù)據(jù)庫系統(tǒng)實現(xiàn)》里面提到的死鎖處理

1.超時死鎖檢測:當存在死鎖時,想所有事務都能同時繼續(xù)執(zhí)行通常是不可能的,因此,至少一個事務必須中止并重新開始。超時是最直接的辦法,對超出活躍時間的事務進行限制和回滾

2.等待圖:等待圖的實現(xiàn),是可以表明哪些事務在等待其他事務持有的鎖,可以在數(shù)據(jù)庫的死鎖檢測里面加上這個機制來進行檢測是否有環(huán)的形成。

3.通過元素排序預防死鎖:這個想法很美好,但現(xiàn)實很殘酷,通常都是發(fā)現(xiàn)死鎖后才去想辦法解決死鎖的原因

4.通過時間戳檢測死鎖:對每個事務都分配一個時間戳,根據(jù)時間戳來進行回滾策略。

這里貼一下等待圖的示例

4.有哪些典型的高并發(fā)死鎖場景?

1.秒殺場景,每個秒殺都是針對同一行的活躍事務,源源不斷的事務發(fā)現(xiàn)自己加鎖的那一行已經(jīng)被人鎖了,這時候InnoDB會進入一個蛋疼的沒必要的死鎖檢測,后續(xù)給大家講講怎么解決 


2.使用二級索引去高并發(fā)更新二級索引記錄(很拗口吧?),MySQL的索引計劃不是100%準確的,我手上有case在并發(fā)更新不同記錄的時候,因為索引計劃走錯了,導致某一個事務用了二級索引讀記錄,另外一個事務用主鍵來讀記錄,進而產(chǎn)生了死鎖,這個案例后續(xù)也會整理出來。


最后 MySQL的源碼如何進行死鎖檢測和處理?

這個問題是后續(xù)的關(guān)鍵,但沒整理完,先歇一歇...

建議先讀一讀上一篇《InnoDB事務結(jié)構(gòu)體代碼變量列表》,因為死鎖是在活躍事務等待鎖的情況下才會去檢測,要先去了解InnoDB事務結(jié)構(gòu)體的trx_lock_t

網(wǎng)頁題目:談談MySQL死鎖一-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://jinyejixie.com/article38/jgcsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導航、網(wǎng)站設(shè)計公司、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設(shè)
尉氏县| 广西| 蒲江县| 广灵县| 密山市| 若尔盖县| 合肥市| 廊坊市| 尚志市| 英山县| 黔江区| 咸阳市| 永平县| 隆德县| 富民县| 保山市| 阿克陶县| 隆德县| 仁布县| 高唐县| 绥滨县| 林口县| 南川市| 盘锦市| 乐至县| 微博| 天全县| 达日县| 吴江市| 华容县| 通渭县| 许昌县| 修武县| 丘北县| 通州区| 石家庄市| 志丹县| 邻水| 比如县| 沾益县| 蕉岭县|