欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題解析

 更新時(shí)間:2023年10月25日 09:09:39   作者:凱恩血蹄LOKTA  
這篇文章主要介紹了MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

mysql 死鎖問(wèn)題及死鎖權(quán)重分析

問(wèn)題發(fā)生過(guò)程:

1、生產(chǎn)發(fā)現(xiàn)死鎖一次

語(yǔ)句為sql1:UPDATE table set  data = ‘123’ where business_no = 'ABC';

該行數(shù)據(jù)的id=1, business_no = 'ABC'

tablbe 字段

id:主鍵 business_no為唯一索引字段,其他字段暫時(shí)無(wú)意義

2、查找發(fā)生死鎖問(wèn)題原因

上述sql在一個(gè)事務(wù)內(nèi),死鎖必定有兩把鎖。

最開始對(duì)鎖的理解就是鎖主鍵、不清楚是否有其他鎖參與。

網(wǎng)上搜索發(fā)現(xiàn)update的where條件為唯一索引時(shí)候,sql會(huì)同時(shí)獲取兩把鎖,先獲取唯一索引business_no的鎖,再獲取主鍵id的鎖,所以必定同一時(shí)刻有先獲取id鎖,再獲取唯一主鍵鎖的sql。

查找代碼返現(xiàn)同一時(shí)刻,另外一個(gè)事務(wù)2執(zhí)行了以下sql

sql2:UPDATE table set  data = ‘123’ where id = 1;

sql3:UPDATE table set  data = ‘123’ where business_no = ‘ABC’;

現(xiàn)在發(fā)現(xiàn)了死鎖原因:

但是現(xiàn)象不復(fù)核預(yù)期

sql 1 先唯一鍵鎖、后 主鍵鎖

sql2 先主鍵鎖 、sql3后唯一鍵鎖

理論是sql1 和 sql3 都有可能發(fā)生死鎖,因?yàn)閟q1在一個(gè)sql內(nèi),sql2、slq3是分開的,

按預(yù)期sql3發(fā)生死鎖錯(cuò)誤的概率最大,但是代碼發(fā)生了8次死鎖全部是sql1發(fā)生了死鎖。

3、為啥sql1發(fā)生死鎖

第一步懷疑有其他sql參與了,但是沒(méi)找到疑點(diǎn)sql。

網(wǎng)上搜索發(fā)現(xiàn)了一個(gè)死鎖權(quán)重的概念。

大概意思是發(fā)生死鎖根據(jù)算法確定權(quán)重,權(quán)重小的事務(wù)會(huì)回滾。

感覺(jué)問(wèn)題快找到了,猜想sql1事務(wù)內(nèi)只有一個(gè)事務(wù)(他基本就是小權(quán)重的事務(wù))。

那接下來(lái)分析日志驗(yàn)證:

事務(wù)2還執(zhí)行了以下sql。

sql4:UPDATE table2 set  data2 = ‘123’ where id = 1;

在sql2和sql3之前還有sql4。

那猜測(cè)有事務(wù)4  中sql5  UPDATE table2 set  data2 = ‘345’ where id = 1;

讓后搜索日志發(fā)現(xiàn)同一時(shí)間有有sql5。

接下來(lái)實(shí)際驗(yàn)證:

開啟事務(wù)1:

執(zhí)行:sql2:UPDATE table set  data = ‘123’ where id = 1;

執(zhí)行sql4:UPDATE table2 set  data2 = ‘123’ where id = 1;

開啟事務(wù)2:

執(zhí)行slq1:UPDATE table set  data = ‘123’ where business_no = 'ABC';

開啟事務(wù)3:

執(zhí)行sql5:UPDATE table2 set  data2 = ‘345’ where id = 1;

事務(wù)1:

執(zhí)行slq3:UPDATE table set  data = ‘123’ where business_no = ‘ABC’;

發(fā)現(xiàn)必sql1必死鎖異常且回滾,問(wèn)題解決。

4、問(wèn)題總結(jié)

msql行級(jí)鎖加鎖的過(guò)程。

mysql發(fā)生死鎖回滾的機(jī)制。

到此這篇關(guān)于MYSQL 根據(jù)唯一索引鍵更新死鎖問(wèn)題的文章就介紹到這了,更多相關(guān)mysql唯一索引鍵更新死鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一個(gè)字段同時(shí)滿足多個(gè)條件的查詢

    一個(gè)字段同時(shí)滿足多個(gè)條件的查詢

    當(dāng)一個(gè)字段需要同時(shí)等于多個(gè)值的時(shí)候,用and直接連不會(huì)有數(shù)據(jù)查出。
    2011-08-08
  • MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析

    MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析

    這篇文章主要介紹了MySql中流程控制函數(shù)/統(tǒng)計(jì)函數(shù)/分組查詢用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解mysql索引總結(jié)----mysql索引類型以及創(chuàng)建

    詳解mysql索引總結(jié)----mysql索引類型以及創(chuàng)建

    索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針。這篇文章主要介紹了詳解mysql索引總結(jié)----mysql索引類型以及創(chuàng)建,有興趣的可以了解一下。
    2016-11-11
  • mysql?count?為null時(shí),顯示0的問(wèn)題

    mysql?count?為null時(shí),顯示0的問(wèn)題

    這篇文章主要介紹了mysql?count?為null時(shí),顯示0的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過(guò)程的方法

    在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過(guò)程的方法

    這篇文章主要介紹了在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過(guò)程的方法,在一定程度上簡(jiǎn)化了操作,需要的朋友可以參考下
    2015-06-06
  • MySQL基礎(chǔ)學(xué)習(xí)之約束詳解

    MySQL基礎(chǔ)學(xué)習(xí)之約束詳解

    約束是作用于表中字段上的規(guī)則,用于限制儲(chǔ)存在表中的數(shù)據(jù),這篇文章主要為大家介紹了MySQL中約束的案例以及外鍵約束的展示與刪除,需要的可以參考一下
    2023-07-07
  • Mysql中的日期時(shí)間函數(shù)小結(jié)

    Mysql中的日期時(shí)間函數(shù)小結(jié)

    本文主要介紹了Mysql中的日期時(shí)間函數(shù)小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • php后臺(tái)經(jīng)常提示無(wú)法連接mysql 刷新后又可以訪問(wèn)的解決方法

    php后臺(tái)經(jīng)常提示無(wú)法連接mysql 刷新后又可以訪問(wèn)的解決方法

    這幾天有一臺(tái)MySQL數(shù)據(jù)庫(kù)服務(wù)器出現(xiàn)了頻繁的掉線情況,通過(guò)排查,并沒(méi)有排查出哪個(gè)網(wǎng)站被攻擊,百思不得其解中的時(shí)候,群里有個(gè)朋友說(shuō)是因?yàn)槲④汯B967723造成的,網(wǎng)上搜索了一下,果然很多人都是這樣的問(wèn)題,都是windows系統(tǒng)下安裝的MySQL造成的
    2011-05-05
  • 服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件

    服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件

    這篇文章主要介紹了服務(wù)器上的mysql實(shí)現(xiàn)讀取sql文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 安裝配置mysql及Navicat prenium的詳細(xì)流程

    安裝配置mysql及Navicat prenium的詳細(xì)流程

    這篇文章主要介紹了安裝配置mysql及Navicat Premium的詳細(xì)流程,配置方法也真的很簡(jiǎn)單,本文給大家詳細(xì)介紹mysql Navicat Premium安裝配置相關(guān)知識(shí)感興趣的朋友,一起學(xué)習(xí)吧
    2021-06-06

最新評(píng)論