五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

初學(xué)者從源碼理解MySQL死鎖問題

發(fā)布日期:2022-03-11 14:05 | 文章來源:源碼中國

通過好多個深夜艱難的單步調(diào)試,終于找到了一個理想的斷點(diǎn),可以看到大部分獲取鎖的過程
代碼在lock0lock.cstatic enum db_err lock_rec_lock() 函數(shù)中,這個函數(shù)會顯示,獲取鎖的過程,以及獲取鎖成功與否。

場景1:通過主鍵進(jìn)行刪除

表結(jié)構(gòu)

CREATE TABLE `t1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(10) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;
delete from t1 where id = 10;

可以看到,對索引 PRIMARY 加鎖,mode = 1027,1027是什么意思呢?1027 = LOCK_REC_NOT_GAP + LOCK_X(非 gap 的記錄鎖且是 X 鎖)

過程如下

結(jié)論:根據(jù)主鍵 id 去刪除數(shù)據(jù),且沒有其它索引的情況下,此 SQL 只需要在 id = 10 這條記錄上對主鍵索引加 X 鎖即可

場景2:通過唯一索引進(jìn)行刪除

表結(jié)構(gòu)做了微調(diào),增加了 name 的唯一索引

構(gòu)造數(shù)據(jù)
CREATE TABLE `t2` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(10) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_name` (`name`)
) ;
INSERT INTO `t2` (`id`, `name`) VALUES 
 (1,'M'),
 (2,'Y'),
 (3,'S'),
 (4,'Q'),
 (5,'L');
 
測試sql語句
delete from t2 where name = "Y"

來看實際源碼調(diào)試的結(jié)果

第一步:

第二步:

結(jié)論:這個過程是先對唯一鍵 uk_name 加 X 鎖,然后再對聚簇索引(主鍵索引)加 X 鎖

過程如下

場景3:通過普通索引進(jìn)行刪除

構(gòu)造數(shù)據(jù)
CREATE TABLE `t3` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(10) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`),
 KEY `idx_name` (`name`) 
);
INSERT INTO `t3` (`id`, `name`) VALUES 
 (1,'N'),
 (2,'G'),
 (3,'I'),
 (4,'N'),
 (5,'X');
 
測試語句:
delete from t3 where name = "N";

調(diào)試過程如圖:

結(jié)論:通過普通索引進(jìn)行更新時,會對滿足條件的所有普通索引加 X 鎖,同時會對相關(guān)的主鍵索引加 X 鎖

過程如下

場景4:不走索引進(jìn)行刪除

CREATE TABLE `t4` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(10) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
)
INSERT INTO `t4` (`id`, `name`) VALUES 
 (1,'M'),
 (2,'Y'),
 (3,'S'),
 (4,'Q'),
 (5,'L');
 
delete from t4 where name = "S";

總共有 5 把 X 鎖,剩下的 3 把就不一一放上來了

結(jié)論:不走索引進(jìn)行更新時,sql 會走聚簇索引(主鍵索引)對全表進(jìn)行掃描,因此每條記錄,無論是否滿足條件,都會被加上X鎖。還沒完...

但是為了效率考量,MySQL做了優(yōu)化,對于不滿足條件的記錄,會在判斷后放鎖,最終持有的,是滿足條件的記錄上的鎖,但是不滿足條件的記錄上的加鎖/放鎖動作不會省略。

過程如下

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持本站。

國外服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部