原创 PostgreSQL 併發控制機制(4):RR隔離級別,MySQL vs PostgreSQL

併發控制是多個事務在併發運行時,數據庫保證事務一致性(Consistency)和隔離性(Isolation)的一種機制。主流商用關係數據庫使用的併發控制技術主要有三種:嚴格兩階段封鎖(S2PL)、多版本併發控制(MVCC)和樂觀併發控制(O

原创 “你怎麼能活到今天?”

“你怎麼能活到今天呢?”,這句話隱含了進化論的法則: 任何物種都是有缺陷的,如果一個物種的缺陷相對於環境會形成致命障礙,那這個物種就不存在了;如果一個物種活了下來,那麼一定是因爲它的缺陷不足以妨礙它的生存。 不僅是人類,任何物種在形成自己的

原创 Google Percolator SI實現

代碼如下,詳細請參見注釋。 class Transaction { //class Transaction //結構體Write struct Write { Row row; //行 Column

原创 PostgreSQL 併發控制機制(3):基於時間戳的併發控制

併發控制是多個事務在併發運行時,數據庫保證事務一致性(Consistency)和隔離性(Isolation)的一種機制。主流商用關係數據庫使用的併發控制技術主要有三種:嚴格兩階段封鎖(S2PL)、多版本併發控制(MVCC)和樂觀併發控制(O

原创 PostgreSQL 併發控制機制(2):表級鎖和行級鎖

併發控制是多個事務在併發運行時,數據庫保證事務一致性(Consistency)和隔離性(Isolation)的一種機制。主流商用關係數據庫使用的併發控制技術主要有三種:嚴格兩階段封鎖(S2PL)、多版本併發控制(MVCC)和樂觀併發控制(O

原创 PostgreSQL 併發控制機制(1):隔離級別

併發控制是多個事務在併發運行時,數據庫保證事務一致性(Consistency)和隔離性(Isolation)的一種機制。主流商用關係數據庫使用的併發控制技術主要有兩種:嚴格兩階段封鎖(S2PL)和多版本併發控制(MVCC)。 Postgre

原创 快照隔離的理論學習

本節簡單介紹了快照隔離的理論框架。 形式化表示 爲了更好的抽象表示相關操作,在介紹理論框架之前,先行介紹事務處理和併發控制相關的形式化表示。 定義1:事務Ti是操作opi的有限集合,操作之間嚴格有序(順序使用標記表示),opi中的每一個操作

原创 併發相關的現象和異常(Phenomena AND Anomalies)

本節簡單介紹了與併發相關的現象(Phenomenon)和異常(Anomalies)。 ANSI SQL標準定義的現象 髒寫 P0 – (Dirty Write) 例 : w1(x) w2(x) (c1 or a1) 髒讀 P1 – Dirt

原创 工作 vs 生活

來自《九個工作謊言》 生活不只是工作,工作可以是生活: 如果工作是受罪,難道生活就不是嗎?只要你始終處在一個被驅使、不自由的狀態,不管這個狀態是工作還是生活,你的人生都是失敗的。要想從這樣的狀態中解脫出來,唯一的辦法,是找到屬於自己的樂趣

原创 關於誤解

曹星原老師說過這麼一句,說得很好,摘錄在這裏: 如果對一件你陌生的、一無所知的事物產生誤解,這還不可怕。最可怕的是,對你眼前的、你身邊的、你身置其中的事物,產生了偏見和誤解。爲什麼呢? 因爲對於不瞭解的事物,你瞭解之後,偏見往往就會消除。

原创 PostgreSQL DBA(176) - Serializability Isolation(基本概念)

PostgreSQL 9.1或以上版本,提供了真正意義的Serializability Isolation,本節主要介紹了Serializability的相關概念,包括Serializability、寫偏序(Write Skew)等。 Wh

原创 PostgreSQL 源碼解讀(124)- 後臺進程#4(autovacuum進程#1)

本節簡單介紹了PostgreSQL的後臺進程:autovacuum,主要分析了AutoVacLauncherMain函數的實現邏輯。 一、數據結構 宏定義 #define GetProcessingMode() Mode #define

原创 PostgreSQL 源碼解讀(123)- MVCC#8(提交事務-實際提交過程)

本節介紹了PostgreSQL提交事務的具體實現邏輯,主要解析了函數CommitTransaction->RecordTransactionCommit的實現邏輯。 一、數據結構 TransactionState 事務狀態結構體 /* *

原创 PostgreSQL 源碼解讀(122)- MVCC#7(提交事務-整體流程)

本節介紹了PostgreSQL提交事務的整體處理邏輯,主要解析了函數CommitTransaction的實現邏輯。 一、數據結構 TransactionState 事務狀態結構體 /* * transaction states - tr

原创 PostgreSQL 源碼解讀(121)- MVCC#6(獲取事務號-實現函數)

本節介紹了PostgreSQL獲取事務號XID的邏輯,主要解析了函數AssignTransactionId->GetNewTransactionId的實現邏輯。 在GetNewTransactionId函數中,檢查是否可以安全的分配XID.