最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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),死鎖必定有兩把鎖。

最開(kā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是分開(kāi)的,

按預(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)證:

開(kāi)啟事務(wù)1:

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

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

開(kāi)啟事務(wù)2:

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

開(kāi)啟事務(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)文章

  • MySQL字符編碼設(shè)置方法

    MySQL字符編碼設(shè)置方法

    這篇文章主要介紹了MySQL字符編碼設(shè)置方法的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • SQL實(shí)現(xiàn)Excel的10個(gè)常用功能的示例詳解

    SQL實(shí)現(xiàn)Excel的10個(gè)常用功能的示例詳解

    SQL,數(shù)據(jù)分析崗的必備技能,你可以不懂Python,R,不懂可視化,不懂機(jī)器學(xué)習(xí)。但SQL,你必須懂。本文為大家總結(jié)了SQL實(shí)現(xiàn)Excel的10個(gè)常用功能的示例代碼,感興趣的可以了解一下
    2022-07-07
  • MySQL InnoDB中意向鎖的作用及原理

    MySQL InnoDB中意向鎖的作用及原理

    意向鎖是由InnoDB在操作數(shù)據(jù)之前自動(dòng)加的,本文主要介紹了MySQL InnoDB中意向鎖的作用及原理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • mysql 8.0.12 安裝配置方法圖文教程

    mysql 8.0.12 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.12 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • win8.1安裝mysql5.6時(shí)遇到問(wèn)題解決方案

    win8.1安裝mysql5.6時(shí)遇到問(wèn)題解決方案

    本文主要記錄的是作者在win8.1安裝mysql5.6時(shí)遇到問(wèn)題的解決方案,網(wǎng)上查了很多方法都沒(méi)能解決,這里把最后的方法分享給大家
    2016-10-10
  • 基于MySql的擴(kuò)展功能生成全局ID

    基于MySql的擴(kuò)展功能生成全局ID

    本文借用 MySQL的擴(kuò)展功能 REPLACE INTO 來(lái)生成全局id,REPLACE INTO和INSERT的功能一樣,但是當(dāng)使用REPLACE INTO插入新數(shù)據(jù)行時(shí),如果新插入的行的主鍵或唯一鍵(UNIQUE Key)已有的行重復(fù)時(shí),已有的行會(huì)先被刪除,然后再將新數(shù)據(jù)行插入
    2015-12-12
  • MySQL 有輸入輸出參數(shù)的存儲(chǔ)過(guò)程實(shí)例

    MySQL 有輸入輸出參數(shù)的存儲(chǔ)過(guò)程實(shí)例

    MySQL 有輸入輸出參數(shù)的存儲(chǔ)過(guò)程實(shí)例
    2009-08-08
  • MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表

    MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表

    這篇文章主要介紹了MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL中使用GROUP_CONCAT數(shù)據(jù)丟失的原因分析及解決過(guò)程

    MySQL中使用GROUP_CONCAT數(shù)據(jù)丟失的原因分析及解決過(guò)程

    MySQL的GROUP_CONCAT函數(shù)可能因group_concat_max_len限制或字符集差異導(dǎo)致數(shù)據(jù)截?cái)?常見(jiàn)問(wèn)題在于返回的字符串長(zhǎng)度超出預(yù)期,解決方案包括調(diào)整group_concat_max_len、考慮分頁(yè)處理或在應(yīng)用層處理,確保數(shù)據(jù)完整傳輸
    2025-09-09
  • MySQL 5.0觸發(fā)器參考教程

    MySQL 5.0觸發(fā)器參考教程

    需要學(xué)習(xí)mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習(xí)
    2008-09-09

最新評(píng)論

六安市| 云林县| 河北区| 安西县| 绩溪县| 苏尼特左旗| 梅河口市| 张家川| 绵竹市| 星子县| 玉溪市| 金山区| 晋宁县| 黎城县| 奉节县| 澎湖县| 宜川县| 蒙自县| 内江市| 溧水县| 禄丰县| 来安县| 玉环县| 丰宁| 苏州市| 阜新市| 安顺市| 壶关县| 新民市| 台江县| 惠安县| 万荣县| 宜都市| 双城市| 福泉市| 扎囊县| 新蔡县| 北辰区| 大英县| 延川县| 凉山|