<noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

<pre id="llnpn"></pre>

    <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

    <noframes id="llnpn">

      <noframes id="llnpn"><pre id="llnpn"></pre>
      • 自動秒收錄
      • 軟件:1973
      • 資訊:56157|
      • 收錄網站:175404|

      IT精英團

      MYSQL VS POLARDB唯一索引死鎖及應用設計

      MYSQL VS POLARDB唯一索引死鎖及應用設計

      瀏覽次數:
      評論次數:
      編輯: 澤洋
      信息來源: ITPUB
      更新日期: 2022-04-27 20:57:15
      摘要

      #issue68021MySQLuniquecheck問題-知乎(zhihu.com)事情的開始是這樣的,最近和阿里云密切聯系,也成為他們的大客戶,(我們當然是大客戶,BIGBIG

      • 正文開始
      • 相關閱讀
      • 推薦作品

      #問題68021 MySQL唯一檢查問題-知乎(zhihu.com)

      這是事情的開始。最近我和阿里云接觸比較密切,成為他們的大客戶(當然我們是大客戶BIG BIG BIG potato),也就是說我和他們的核心研發有密切的接觸;d同學。這段文字是他們的高層人物寫的關于MYSQL的唯一索引的文字,感謝他推給我。

      實際上,在DBA行業中,關于唯一索引的爭論一直不斷,但DBA對開發本身并不信服。我們只能說,如果你這樣做,你的表現會受到影響。當然,這和牛屎沒什么區別。

      我們截取陳老師文中關于偽代碼的部分。

      在二級索引中找到要插入值的B樹頁面

      斷言B樹頁面被鎖存

      equal-range=二級索引中與您的值沖突的記錄范圍

      如果(等于范圍不為空){

      釋放B樹上的閂鎖,并開始新的微型事務

      對于相等范圍內的每條記錄

      鎖定它之前的間隙和記錄本身(這就是LOCK_S所做的)

      最后一次后也鎖定間隙(等范圍)

      另外(在錯誤#32617942被修復之前),在最后一個(相等范圍)之后鎖定記錄

      一旦你完成了以上所有操作,再次找到B樹頁面,并再次鎖定它

      }

      將記錄插入頁面,并釋放B樹頁面上的閂鎖。

      讓我們開門見山,唯一的索引被插入。

      1索引是有序的。

      唯一索引是唯一的。

      雖然我們用的隔離級別是RC,但是同性戀鎖不會出現在MYSQL或者POLARDB里面,但是,但是,但是

      你是唯一的索引。

      我們需要確認的是

      1當插入唯一索引時,它將確定當前索引中是否存在相同的值。

      2插入時,避免同時插入其他相同的值。

      3插入時也要判斷順序,插入時也要考慮周圍值的變化。

      基于這些考慮,鎖是必要的。

      我們來看看這段偽代碼。

      在二級索引中找到要插入值的B樹頁面

      斷言B樹頁面被鎖存

      第一步是找到要插入數據的索引頁,并鎖定頁鎖。

      equal-range=二級索引中與您的值沖突的記錄范圍

      如果(等于范圍不為空){

      釋放B樹上的閂鎖,并開始新的微型事務

      對于相等范圍內的每條記錄

      在它之前鎖定缺口,記錄本身

      f (this is what LOCK_S does)
      also lock the gap after the last(equal-range)
      also (before Bug #32617942 was fixed) lock the record after last(equal-range)
      once you are done with all of the above, find the B-tree page again and latch it again
      }

      第二部是一個具有原子性的操作,

      1  獲取與你插入值有沖突的范圍,(尤其對那些多個鍵值是唯一索引的情況)

            2  如果你插入的鍵值的沖突范圍并不為空

                 3  將撤銷原有的栓鎖,將鎖的粒度變小

                     4  開始針對可能產生沖突的鍵值進行check  (期間產生間隙鎖)
      2  如果沒有沖突,數據插入到頁面

      在整個的操作過程中,是需要對插入的整體過程加GAP 鎖,保證在判斷后你插入數據前,不會有其他的數據插入到這個位置。

      之所以是說后續,這里考慮的問題是多鍵值的唯一索引與單鍵值的索引,為什么要考慮這個問題,主要還是目前使用的  next-key lock 在位置索引中可能產生的范圍的大小問題。

      舉例:

      在表設計時,我們可以對多列產生唯一索引,而根據上文中的描述,唯一的鍵值要插入到索引的情況下,是需要針對一段范圍的數據進行鎖定的,那么你的值越多,產生的范圍會越大,導致出現死鎖的概率就越大。

      上文中從源代碼的方面進行了闡述,如何對數據庫的源代碼進行改造,但使用者怎么辦,如何去最大化的規避問題。

      我們需要確認幾點

      1 數據插入索引是有序的

      2 數據插入到唯一索引時盡量少進行上面范圍的GAP LOCK

      這里就基于范圍的問題進行討論,如何能在程序設計的基礎上最大化的減小產生死鎖的幾率和范圍。

      如果有多個鍵值要進行唯一索引的處理時,需要通過HASH 算法(根據算法盡量避免由于HASH 算法導致的雖然值不同,但HASH 后值相同的可能性),通過將多個字段通過算法轉換為 一個HASH 值,并且對這個HASH值的字段建立唯一索引。

        

      這樣的好處顯而易見

      1  降低上文中提到在MYSQL 或POLARDB 中唯一索引出現死鎖的可能性

      2  降低一個表上出現較大唯一索引的情況(一個表中包含索引的整體字節數是有限制的)

      3  對應用友好和靈活,例如我今天是3個字段,明天可能是四個字段,那么實際上,產生這樣的情況下,表的索引不必改動,改動的是應用程序中關于插入HASH 字段的算法中包含的字段的數量即可。否則你又會建立一個新的唯一索引。

      其實數據庫本身作為三大系統之一的系統,包容性應該是很高的,但基于數據庫的對于數據的嚴謹性和邏輯性的問題,要求很高,導致使用數據庫的過程中,需要對數據庫本身的原理進行理解,盡量避免一些數據庫本身無法在短時間滿足的  性能 ---  功能  之間的矛盾,所以在設計應用程序時也應該有的放矢的進行有效設計。

      標簽:索引 死鎖 鍵值
      卡夫卡3.0新功能全暴露 好香??!
      ? 上一篇 2022-04-27
      在Linux中檢查磁盤空間的12個有用的df命令
      下一篇 ? 2022-04-27
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 阿帕奇建筑師遵循的30條設計原則
        0閱讀 0條評論 個贊
        作者介紹Srinath,科學家,軟件架構師。ApacheAxis2項目的聯合創始人,ApacheSoftware基金會的成員,WSO2流處理器(wso2.com/analytics)的聯席架構師?!?/div>
      • MYSQL VS POLARDB唯一索引死鎖及應用設計
        1閱讀 0條評論 個贊
        #issue68021MySQLuniquecheck問題-知乎(zhihu.com)事情的開始是這樣的,最近和阿里云密切聯系,也成為他們的大客戶,(我們當然是大客戶,BIGBIG……
      • 運維數字化轉型的幾點思考
        1閱讀 0條評論 個贊
        這個月底要召開一個企業運維數字化轉型的研討會,昨天一個合作伙伴和我討論一些研討會的話題問題。數字化轉型是近期十分熱門的話題,各大國企央企也把數字化轉型作為未來幾年的工作重點。不過針對于IT運維,數字化……
      • 企業如何識別不同業務場景下的數據安全建設問題?
        3閱讀 0條評論 個贊
        以下文章來源于御數坊,作者御數坊前言數據安全建設的出發點和立足點,是在于對企業業務安全的保障,關鍵是企業是否具有業務場景的數據風險識別和解決的能力。那么,如何才能從業務場景的角度出發,做好數據安全的……
      • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
        0閱讀 0條評論 個贊
        具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
      • PostgreSQL并行框架分析
        3閱讀 0條評論 個贊
        作者簡介施博文,目前就職于騰訊云PG團隊概覽PostgreSQL并行框架提供了一系列方便的函數,支持在插件或內核中直接調用相關函數,啟動若干個后臺進程進行并行操作。目前,PG的并行框架主要用來……
      • Python中的協同學 是怎么回事?
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-博海拾貝diary,作者so1n在io比較多的場景中,Async語法編寫的程序會以更少的時間,更少的資源來完成相同的任務,這篇文章則是介紹了Python的Async語法的協……
      • Linux基礎總結 這個就夠了!
        1閱讀 0條評論 個贊
        1.Linux安裝因為圖太多了,轉載一篇從虛擬機vmware配置到centos7詳細安裝教程https://www.cnblogs.com/wcwen1990/p/7630545.html2.lin……
      • 談談復雜項目代碼的應用分層
        1閱讀 0條評論 個贊
        —1—背景說起應用分層,大部分人都會認為這個不是很簡單嘛就controller,service,mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做……
      • Linux中的交互式進程查看命令htop
        1閱讀 0條評論 個贊
        htop界面展示HtopLinux進程監控工具“Htop是一個用于Linux/類Unix系統的交互式實時進程監控應用程序,也是top命的替代品,它是所有Linux操作系統上預裝的默……
      • 如何用10行bash shell腳本監控Linux?
        1閱讀 0條評論 個贊
        http://985.so/xbtd子沐愛掃地(譯)監控我們的環境對于服務器運維來說至關重要,尤其是在部署新的應用程序時。如今,公司每天都使用開源解決方案來監控系統資源。但是,當出于測試的目的來監控……
      • SQL優化通用公式:5個步驟和10個案例
        1閱讀 0條評論 個贊
        導讀:在應用開發的早期,數據量少,開發人員開發功能時更重視功能上的實現,隨著生產數據的增長,很多SQL語句開始暴露出性能問題,對生產的影響也越來越大,有時可能這些有問題的SQL就是整個系統性能的瓶頸?!?/div>
      • JD.COM面試問題:ElasticSearch深度分頁解決方案
        0閱讀 0條評論 個贊
        以下文章來源于月伴飛魚,作者日常加油站前言Elasticsearch是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。在使用關系型數據庫中,我們被告知要注意甚至……
      • 創建Go語言最快的排序算法
        1閱讀 0條評論 個贊
        前言說到排序算法,很多同學會想起快速排序、堆排序、冒泡排序這些耳熟能詳的算法。了解得深一些的同學,也可能看過例如Python的timsort以及C++introsort之類的排序算法?!?/div>
      • 詳細解釋Linux中的diff命令和例子
        1閱讀 0條評論 個贊
        文件比較在Linux中起著重要的作用,特別是對于程序員和Linux系統管理員。例如,如果您想找到兩個源代碼文件之間的差異來開發補丁,那么您需要一個文件比較工具來簡化這個過程。Linux中有幾……
      • 數據治理 區分系統、機制、流程的概念很重要
        0閱讀 0條評論 個贊
        以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生我們剛接觸數據的時候,從事的大多是具體的數據管理活動,無論是數據的采集、開發和開放,或是元數據管理、數據質量管理或是數據安全管理等等,但當你想更……
      • 優化Docker鏡像安全性的12個技巧 建議收藏起來!
        0閱讀 0條評論 個贊
        本文介紹了12個優化Docker鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非root用戶身份運行,或如何確保使用最新的依賴……
      • 一行Python代碼實現程序并行
        1閱讀 0條評論 個贊
        Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我覺得錯誤的教學指導才是主要問題。常見的經典Python多線程、多進程教程多顯得偏"重"。而且往往隔靴搔……
      • 在Linux中檢查磁盤空間的12個有用的df命令
        1閱讀 0條評論 個贊
        1.檢查文件系統磁盤空間使用情況這df命令顯示文件系統上的設備名稱、總塊數、總磁盤空間、已用磁盤空間、可用磁盤空間和掛載點信息。[root@local~]#dfFilesystem1K-bloc……
      • 一天一技能:協調與多流程的完美結合
        7閱讀 0條評論 個贊
        我們知道,協程本質上是單線程單進程,通過充分利用IO等待時間來實現高并發。在IO等待時間之外的代碼,還是串行運行的。因此,如果協程非常多,多少每個協程內部的串行代碼運行時間超過了IO請求的等待時間,那……
      最近發布資訊
      更多
      本地特级毛片,老师脱裙子让我看内裤,人妻av乱片aV出轨avApp
      <noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

      <pre id="llnpn"></pre>

        <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

        <noframes id="llnpn">

          <noframes id="llnpn"><pre id="llnpn"></pre>