亞信科技AntDB資料庫——深入瞭解AntDB-M後設資料鎖的實現(一)
鎖的獲取
5.1 鎖的強弱
當執行緒已經持有的鎖比新申請的鎖更強時,認為已經持有了鎖,無需再對申請鎖型別加鎖。鎖的強弱指持有的鎖與其他鎖的不相容集合大小,集合相同鎖相同,集合更大鎖更強,否則無強弱關係。透過鎖的相容點陣圖進行簡單的 位運算 即可快速判斷鎖的強弱。
5.2 兩種鎖範圍
按照鎖的適用範圍將鎖劃分為兩類,當然劃分不是非此即彼的,會有重疊,這兩類鎖有各自的相容性和鎖物件管理方式。
●範圍鎖( scoped locks)
只有三種鎖(IX,S,X),主要用於GLOBAL、COMMIT、TABLESPACE、BACKUP_LOCK名稱空間的物件。這幾種名稱空間的鎖主要從整體上去限制併發操作,比如在DML訪問一張表時,會先申請一個該表所屬SCHEMA的IX鎖,避免訪問過程中該SCHEMA被修改、刪除。範圍鎖全域性每種名稱空間都僅有一個鎖物件,從而實現全域性性的 併發控制 。
●
物件鎖
(per-object locks)
除了IX鎖,其他型別都可以用於其他名稱空間,這部分是最常用的鎖型別。主要用於對資料庫的某個具體後設資料的併發控制。這類鎖物件會比較多,對其有獨特的管理,本文不再展開說明。
5.3 兩種鎖型別
根據鎖的相容性、以及通用性將鎖分為兩類。
5.3.1互不干擾型(unobtrusive)
unobtrusive鎖相互間相容,並且適用於所有DML操作。這類鎖獲取後不用記錄下具體哪個執行緒申請的,只需要記錄下有多少個請求已經獲得,透過鎖物件下64位 原子變數 來計數,因此對其他連線的鎖申請影響很小,表現比較低調。在64位中每種型別鎖都有由固定的位範圍存放加鎖個數。對於scoped與per-object是不同鎖物件,因此位分別設定。
scoped locks: IX(0~59位)
per-object locks: S,SH(0~19位),SR(20~39位), SW(40~59位)
注意分配20位的不會產生溢位,因為當前設計不會同時有超過2^20 - 1個連線。
另外,還存在三個狀態指示位,用於加速鎖的處理。
IS_DESTROYED: 標識鎖物件將被釋放。
HAS_OBTRUSIVE: 標識鎖物件下有obtrusive鎖,新的鎖申請必須進入慢速申請路徑,釋放鎖時,也要先加鎖以保護已授予鎖連結串列。
HAS_SLOW_PATH: 標識鎖物件下是否有unobtrusive鎖。
5.3.2 干擾型(obtrusive)
相互間不相容,對於DML操作不通用。此類鎖的申請過程需要對鎖物件的讀寫鎖加寫鎖,對不同執行緒的鎖申請影響較大,因此顯的比較張揚。
scoped locks: X,S。
per-object locks: SU, SRO, SNW, SNRW, X。
5.4 加鎖路徑
鎖的申請過程分為兩種路徑,1)快路徑, 即只需要增加鎖個數計數來授予鎖; 2)慢路徑,需要對鎖物件讀寫鎖加寫鎖來授予鎖。
5.4.1 快路徑(fast path)
對於unobtrusive鎖,可以透過快速路徑來快速授予鎖。但是授予鎖有個前提,就是該鎖物件下沒有obtrusive鎖,因為unobtrusive與obtrusive之間有些鎖是互斥的,只有在沒有obtrusive鎖存在時,unobtrusive鎖才彼此相容。透過檢測鎖狀態的 HAS_OBTRUSIVE 位即可快速判斷。透過CAS操作即可更新鎖個數,同時也會檢測是否已有其他執行緒以張揚方式申請了鎖。CAS操作成功,即申請鎖成功。
5.4.2 慢路徑(slow path)
對於obtrusive鎖,以及當前申請unobtrusive鎖,而鎖物件下已經持有obtrusive鎖時,需要進入慢路徑申請鎖,即先對鎖物件下的讀寫鎖加寫鎖。在當前鎖物件進入慢路徑時,設定鎖狀態的 HAS_SLOW_PATH 位。如果是申請obtrusive鎖,則設定 HAS_OBTRUSIVE 位。
5.4.3 鎖點陣圖
鎖物件的快速路徑鎖申請鎖、已經授予的鎖佇列、正在等待鎖佇列都有標識其含有鎖型別的鎖點陣圖,透過點陣圖可以加快鎖相容判斷速度,避免每次遍歷鎖佇列。
5.4.4 快速路徑鎖物化
在申請obtrusive鎖進入慢路徑之前,要將當前執行緒透過快路徑獲取的鎖物化,即從鎖物件的鎖狀態計數器中減除,並放入到鎖物件的已經授予鎖列表中。因為鎖狀態計數器中只有鎖個數,不區分執行緒。而當前執行緒自己申請的unobtrusive鎖與obtrusive鎖不衝突。物化可以確保鎖狀態計數器中都是其他執行緒申請的,這樣就可以透過快速路徑鎖點陣圖快速判斷是否與當前申請鎖相容。
5.4.5 慢路徑鎖的授予條件
當且僅當滿足如下兩個條件時,才可以授予鎖。
1. 其他執行緒沒有持有不相容型別鎖。
2. 當前申請的鎖的優先順序高於請求等待列表中的。
首先透過鎖點陣圖判斷等待佇列,不相容則不能授予鎖。再判斷快速路徑,不相容則不能授予鎖。最後判斷授予鎖佇列,都相容則授予鎖,不相容,需要遍歷持有鎖佇列,檢查是否其他執行緒持有不相容鎖,是則不能授予,否則可以授予鎖。
關於亞信安慧AntDB資料庫
AntDB資料庫始於2008年,在運營商的核心繫統上,為全國24個省份的10億多使用者提供線上服務,具備高效能、彈性擴充套件、高可靠等產品特性,峰值每秒可處理百萬筆通訊核心交易,保障系統持續穩定執行近15年,並在通訊、金融、交通、能源、物聯網等行業成功商用落地。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70026696/viewspace-3000202/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 亞信科技AntDB資料庫——深入瞭解AntDB-M後設資料鎖的實現(二)資料庫
- 亞信安慧AntDB:AntDB-M後設資料鎖(五)
- 亞信安慧AntDB:AntDB-M後設資料鎖(十)
- 亞信安慧AntDB資料庫——實時流資料處理的先鋒資料庫
- 亞信安慧AntDB資料庫助力智慧高速建設資料庫
- 亞信安慧AntDB資料庫與流式計算資料庫
- 亞信安慧AntDB資料庫斬獲“最佳資料庫品牌”大獎資料庫
- 15年磨礪,亞信科技AntDB 8.0資料庫,傾“擎”釋出資料庫
- 亞信安慧AntDB資料庫開啟分散式資料庫的新篇章資料庫分散式
- 中國資料庫市場的領軍黑馬——亞信安慧AntDB資料庫資料庫
- 亞信安慧AntDB資料並行載入工具的實現(二)並行
- 亞信安慧AntDB 資料庫:超融合資料庫引領實時計算新時代資料庫
- 亞信安慧AntDB MTK資料同步工具之資料稽核
- 亞信安慧AntDB領航分散式資料庫的突破之路分散式資料庫
- 萬字長文深度解讀亞信安慧AntDB-T資料庫鎖——效能和穩定性的保障資料庫
- 亞信科技AISWare AntDB資料庫在運營商核心業務系統的聯合實踐分享AI資料庫
- 亞信安慧AntDB-S流式資料庫實現企業數智化轉型資料庫
- 亞信安慧AntDB資料庫助力數字經濟騰飛資料庫
- 超融合一體流式引擎,打造分散式資料庫新紀元,亞信科技釋出AntDB V7.2資料庫分散式資料庫
- 亞信安慧AntDB資料庫引領大資料新紀元,星河案例彰顯卓越表現資料庫大資料
- 亞信科技AntDB:一款面向未來場景、引領前沿技術的資料庫產品資料庫
- 亞信安慧AntDB探索資料庫更多可能資料庫
- 亞信安慧AntDB資料庫:引領向量資料庫標準化,助力大資料技術創新資料庫大資料
- 亞信安慧AntDB資料庫成功助力通訊業務核心轉型資料庫
- 亞信安慧AntDB資料庫:賦能行業數智化轉型資料庫行業
- 亞信科技AntDB資料庫榮膺第十二屆資料技術嘉年華(DTC 2023)大獎資料庫
- 亞信安慧AntDB:為資料安全和穩定而生
- 亞信安慧AntDB:靈活處理資料典範
- 亞信科技AntDB資料庫榮獲“2021金融科技應用創新突出貢獻獎”資料庫
- 國產資料庫市場橫空殺出個巨頭?亞信 AntDB資料庫憑什麼資料庫
- 亞信安慧AntDB構建繁榮生態的資料庫管理系統資料庫
- 亞信安慧AntDB資料庫引領數字時代通訊創新資料庫
- 《2023 亞信安慧AntDB資料庫年度報告》請查收資料庫
- 亞信安慧AntDB資料庫引領行業數字化轉型資料庫行業
- 亞信科技斬獲“鼎新杯”多項大獎!AntDB資料庫在信創賽道再創佳績資料庫
- 國內首款! 亞信科技資料庫AntDB亮相中國信通院效能測試工具釋出會資料庫
- 數字檔案安全與高效管理的先鋒——亞信安慧AntDB資料庫資料庫
- 砥礪十年,“信”創未來!亞信科技AntDB資料庫產品釋出會即將啟幕資料庫