顾美玲勾引管家|日韩黄色成人|国产精品theporn动漫|欧美日日日|国产精品探花在线

專業只做數據庫實訓和認證的品牌機構

微信公眾號新浪微博
免費咨詢電話:400-0909-964
當前位置: 網站首頁 > pg大講堂 > PostgreSQL技術大講堂 - 第20講:事務概述與隔離級別

PostgreSQL技術大講堂 - 第20講:事務概述與隔離級別

文章來源: 更新時間:2023/6/21 14:24:57

在線老師點擊咨詢:

最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!

我要咨詢

PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色權限、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。

第20講:事務概述與隔離級別

內容1:ACID四大特性

內容2:PostgreSQL事務隔離級別

內容3:MVCC介紹

內容4:Clog與事務狀態

內容5:事務快照

內容6:可重復讀隔離級別特點

內容7:讀提交隔離級別特點

內容8:可串行化隔離級別特點


ACID概述

· ACID四大特性:

--> Atomicity(原子性):一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。

--> Consistency(一致性):在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的數據必須完全符合所有的預設規則,這包含數據的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。

--> Isolation(隔離性):數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。

--> Durability(持久性):事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。


PostgreSQL支持的事務隔離級別

· 下表描述了PostgreSQL實現的事務隔離級別


MVCC概述

· 事務id(txid)

并發控制是一種在數據庫中并發運行多個事務時保持一致性和隔離性的機制,這是ACID的兩個屬性。

并發控制技術:

--> 多版本并發控制(MVCC)

--> 嚴格的兩階段鎖(S2PL)

--> 樂觀并發控制(OCC)

· MVCC特點

每次寫操作都會創建數據項的新版本,同時保留舊版本。當事務讀取一個數據項時,系統會選擇其中一個版本以確保單個事務的隔離。MVCC的主要優點是“讀不阻止寫,寫不阻止讀,相反,例如,基于S2PL的系統必須在寫卡器寫入項時阻止讀卡器,因為寫卡器獲取項的獨占鎖。PostgreSQL和一些rdbms使用MVCC的一個變體,稱為快照隔離(Snapshot Isolation,SI)。


MVCC實現對比

· 事務id(txid)

PostgreSQL通過應用可見性檢查規則來選擇項目的適當版本

由于PostgreSQL數據塊中包含了未刪除和已刪除的行的數據,所以在讀取數據塊中行的時候,需要一套規則來判斷哪些行能夠被哪些事務所看得見,我們成為行可見性規則

Oracle使用回滾段來選擇項目的適當版本

Oracle專門創建了一個回滾表空間,用來存放修改前的行的數據,而表的數據塊中沒有包含刪除行的數據,所以不需要行可見性規則來判斷。


事務狀態

· Transaction Status

四種事務狀態:

--> IN_PROGRESS

--> COMMITTED

--> ABORTED

--> SUB_COMMITTED


Commit Log

· Clog 工作原理


事務快照

· 內置函數txid_current_snapshot及其文本表示格式

testdb=# SELECT txid_current_snapshot();

txid_current_snapshot

-----------------------

100:104:100,102

(1 row)

· txid_current_snapshot的文本表示為“xmin:xmax:xip_list”,組件描述如下

Xmin:仍在活動的txid。所有以前的事務要么提交并可見,要么回滾并停止。

Xmax:第一個尚未分配的txid。截至快照時,所有大于或等于此值的txid尚未啟動,因此不可見。

xip_list:快照時的活動txid。該列表僅包含xmin和xmax之間的活動txid。

例如,在快照'100:104:100,102'中,xmin是'100',xmax是'104',xip_list是'100,102'。

· Examples of transaction snapshot representation


事務管理器

· 不同隔離級別的事務快照狀態


并發UPDATE時

防止更新的數據丟失

· 并發UPDATE操作,隔離級別不同如何保護已修改的數據不丟失

1)如果A事務回滾,則b事務能夠更新成功

2)B事務如果查詢了表,則再次更新時失敗,如果沒有,則會更新成功



防止更新的數據丟失

· 讀提交事務隔離級別(事務A和B同時修改同一行)

· 可重復讀事務隔離級別(事務A和B同時修改同一行)

· 可重復讀事務隔離級別(事務B在提交前執行了查詢)

· 可重復讀事務隔離級別(事務B在提交前沒有執行查詢)


可串行化快照隔離

· SSI(可串行化快照隔離)實施的基本策略

寫入傾斜計劃及其優先級圖

· 在PostgreSQL中實現SSI

SIREAD locks:SIREAD鎖在內部稱為謂詞鎖,三個部分組成,由一對對象和(虛擬)txid 組成。

rw-conflicts:rw-conflicts是SIREAD鎖的三個組成部分中的一個和讀寫SIREAD鎖的兩個txid

· SSI 怎樣造成的

事務提交失敗的原因是要保護事務A修改的結果,因為事務B是在可串行化事務隔離級別,所以無法看到事務A修改后的結果

· 其它造成的場景

注意事務提交的不同順序

· 假陽性可串行化快照隔離異常

兩個事務分別查詢和更新各自的行,所以不會影響,都能夠提交成功。

· 假陽性可串行化快照隔離異常(1) – Using sequential scan

表沒有索引,導致順序掃描,兩個事務操作時發生交叉訪問同一個塊

· 假陽性可串行化快照隔離異常(2) – Index scan using the same index page

如果表比較小,導致root和leaf索引塊同屬于一個塊,兩個事務也發生交叉訪問同一個索引塊

· 假陽性可串行化快照隔離異常(3) – Index scan using the difference index page

插入新數據,導致root和leaf索引塊不屬于一個塊,不會造成交叉訪問

以上就是 第20講- 事務與隔離級別 的內容,歡迎一起探討交流,往期視頻,聯系cuug

QQ交流群:752027153

微信交流群:聯系客服拉你進微信PG交流群

釘釘交流群:35822460,釘釘群專門有視頻講解

本文地址:http://m.mudan321.com/pgdjt/34357831729.html 轉載請注明!


PostgreSQL入門到精通 100+ 個學習資料

Oracle培訓機構

金牌講師<>

冉乃綱-老師CUUG金牌講師
冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細了解老師]

免費咨詢上課流程 客服在線中

陳衛星-老師CUUG金牌講師
陳老師 CUUG金牌講師 精通Oracle管理、備份恢復、性能優化 11年Ora...[詳細了解老師]

免費咨詢上課流程 客服在線中

選學校如何選擇適合自己的學校

CUUG -CHINA UNIX USER GROUP,是國際UNIX組織UNIFORUM的中國代表,是國內悠久的專業UNIX培訓機構,被譽為中國UNIX 的搖籃。多年來,以提高教學質量為本,強調素質教育,積極引進、消化國外的新技術,有效的結合中國....[詳情]

一站式服務(從入學到就業一幫到底)

入學

學習

就業

實操

食宿
地址:北京市海淀區田村山南路35號院17號樓
課程咨詢: 400-0909-964
企業服務:137 1818 8639(陳經理)
部分信息來源于網絡,如有錯誤請聯系指正!
版權所有@北京神腦資訊技術有限公司 (CUUG,中國UNIX用戶協會) Copyright 2016 ALL Rights Reserved 京ICP備11008061號-1