av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

一次詭異的數(shù)據(jù)庫“死鎖”,問題究竟在哪里?

程序死鎖的問題,很難調(diào)試,看進程堆棧,看各個線程與鎖的情況,對照代碼進行排查。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋成都航空箱等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身策劃品質(zhì)網(wǎng)站。

數(shù)據(jù)庫死鎖的問題,更難,看不了數(shù)據(jù)庫堆棧,也看不了數(shù)據(jù)庫線程與鎖,更難以對照代碼排查。

前段時間,和一個朋友討論了一個“疑似”數(shù)據(jù)庫死鎖的問題,最后進行試驗與排查,找到了問題所在。

場景如下:

同一個表,高并發(fā)事務(wù),事務(wù)內(nèi)先插入一條記錄,再更新這條記錄:

  • 如果更新的是唯一索引,有異常;
  • 如果更新的是自增主鍵,就沒有異常;

畫外音:先不要被“dead lock”描述所迷惑,是死鎖問題,阻塞問題,還是其他異常,還另說。

而且,據(jù)朋友所述,還能夠復(fù)現(xiàn):

  • 開啟事務(wù);
  • 插入記錄;
  • sleep 5秒;
  • 修改被插入的記錄;

在并發(fā)時穩(wěn)定復(fù)現(xiàn)。

根據(jù)朋友的描述,在線下開了多個MySQL客戶端進行了并發(fā)模式測試,結(jié)果還挺出乎意料的。

第一步:數(shù)據(jù)準備

 
 
 
 
  1. create table t ( 
  2. id int(20) primary key AUTO_INCREMENT, 
  3. cell varchar(20) unique 
  4. )engine=innodb; 

新建表:

  • 存儲引擎是innodb,MySQL版本是5.6;
  • id字段,自增主鍵;
  • cell字段,唯一索引;
 
 
 
 
  1. start transaction; 
  2. insert into t(cell) values(11111111111); 
  3. insert into t(cell) values(22222222222); 
  4. insert into t(cell) values(33333333333); 
  5. commit; 

插入一些測試數(shù)據(jù)。

第二步:session參數(shù)設(shè)置

事務(wù)的隔離級別,事務(wù)的自動提交等參數(shù)設(shè)置不當,都會對實驗的結(jié)果產(chǎn)生影響,詢問了朋友,事務(wù)的隔離級別是RR(repeatable read)。

 
 
 
 
  1. set session autocommit=0; 
  2. set session transaction isolation level repeatable read; 

每一個session啟動后:

  • 關(guān)閉自動提交;
  • 把事務(wù)隔離級別設(shè)為RR;

 
 
 
 
  1. show session variables like "autocommit"; 
  2. show session variables like "tx_isolation"; 

不放心的話,可以用上面兩個語句查詢確認。

第三步:多個終端session模擬并發(fā)事務(wù)

如上圖,用SecureCRT開啟兩個窗口:

  • 窗口A,先啟動事務(wù),并插入記錄;
  • 窗口B,再啟動事務(wù),也插入記錄;
  • 窗口A,修改插入的記錄;
  • 窗口B,也修改插入的記錄;

奇怪的現(xiàn)象發(fā)生了,如果并發(fā)事務(wù)的update語句:

  • 更新條件是cell,就會發(fā)生異常;
  • 更新條件是id,就一切正常;

按道理,插入不沖突的記錄,然后修改這條記錄,行鎖不應(yīng)該沖突呀?唯一索引,主鍵索引怎么會有差異呢?是否有關(guān)?是死鎖,還是其他原因?

大家?guī)兔Ψ治龇治?,到底問題在哪里呢?

【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】


本文題目:一次詭異的數(shù)據(jù)庫“死鎖”,問題究竟在哪里?
網(wǎng)站地址:http://uogjgqi.cn/article/dhseigs.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流