成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 開發工具 數據庫運維
前段時間,和一個朋友討論了一個“疑似”數據庫死鎖的問題,最后進行試驗與排查,找到了問題所在。

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

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

[[268389]]

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

場景如下:

同一個表,高并發事務,事務內先插入一條記錄,再更新這條記錄:

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

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

而且,據朋友所述,還能夠復現:

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

在并發時穩定復現。

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

第一步:數據準備

  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; 

插入一些測試數據。

第二步:session參數設置

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

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

每一個session啟動后:

  • 關閉自動提交;
  • 把事務隔離級別設為RR;

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

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

第三步:多個終端session模擬并發事務

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

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

奇怪的現象發生了,如果并發事務的update語句:

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

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

大家幫忙分析分析,到底問題在哪里呢?

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2019-04-15 13:15:12

數據庫MySQL死鎖

2019-12-05 09:13:18

通信

2010-03-19 16:08:17

2011-07-14 13:10:44

負載均衡Nginx

2024-01-08 08:59:40

傳統企業數字化癥結

2024-03-18 09:10:00

死鎖日志binlog

2021-10-14 10:53:20

數據庫查詢超時

2023-10-11 22:24:00

DubboRedis服務器

2021-12-01 07:26:13

領域驅動建模

2013-11-08 00:45:40

國產數據庫

2017-03-14 14:09:08

數據庫Oracle備份

2013-10-08 09:54:41

數據庫安全數據庫管理

2023-11-29 12:12:24

Oceanbase數據庫

2018-07-20 08:44:21

Redis內存排查

2011-04-13 09:21:30

死鎖SQL Server

2019-03-15 16:20:45

MySQL死鎖排查命令

2021-11-25 14:14:28

加密貨幣數字貨幣貨幣

2019-04-04 15:00:40

SQL索引數據庫

2018-12-06 16:25:39

數據庫服務器線程池

2021-01-18 08:08:16

虛函數代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩手机视频 | 一区免费 | 久久精品一 | 日本一区二区三区在线观看 | 97视频在线观看网站 | 中文字幕加勒比 | 成人视屏在线观看 | 特级毛片www| 久久久亚洲 | 中文字幕视频一区 | 怡红院免费的全部视频 | 视频一区在线 | 久久久精品一区 | 嫩草伊人| 99福利| 国产欧美一区二区精品久导航 | 亚洲精品片| 四虎在线观看 | 日本不卡免费新一二三区 | 在线国产视频 | 夜夜干夜夜操 | 天天干天天谢 | 国产精品久久久久久久久久 | 精品国产一区二区三区四区在线 | 亚洲精彩视频在线观看 | 国产精品久久久久久久岛一牛影视 | 国产一区二区三区在线视频 | 久久一级 | 天天射色综合 | 国产精品第2页 | 黄色一级毛片 | 欧美激情国产日韩精品一区18 | 欧美亚洲视频 | 国产丝袜一区二区三区免费视频 | 97国产一区二区精品久久呦 | 91在线免费视频 | 久久青青| 黄色大片免费观看 | 嫩草伊人| 久久精品色欧美aⅴ一区二区 | 欧美91|