<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        PostgreSQLMVCC源碼實現

        來源:懂視網 責編:小采 時間:2020-11-09 14:55:20
        文檔

        PostgreSQLMVCC源碼實現

        PostgreSQLMVCC源碼實現:MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一定程度上 MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一
        推薦度:
        導讀PostgreSQLMVCC源碼實現:MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一定程度上 MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一

        MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一定程度上

        MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一定程度上的分離,提高數據庫每秒處理查詢的能力(QPS)。

        用戶發起的普通查詢請求(不包含select … for update語句),并不堵塞DML事務。在Read Commit事務隔離級別時,查詢請求只讀取查詢請求之前已經提交的事務的數據更改,對當前版本的數據并不影響;

        而DML語句,會操作當前版本。因此做到了讀寫分離的目的,提高數據庫并發能力。

        不同的數據庫,實現MVCC的方法不同。Oracle和MySQL Innodb 存儲引擎類似的使用undo來實現。

        對于PostgreSQL數據庫來講,他沒有undo,那么,PG又是怎么來實現他自己的MVCC呢?又有那些優缺點呢?

        PG用copy tuple和tuple的xmin,xmax,cmin,cmax等標記來實現多版本。

        xmin:在創建記錄(tuple)時,記錄此時,后面每次update也會更新。

        xmax: 在刪除tuple或者lock時,記錄此時;如果記錄沒有被刪除,那么此時為0。

        cmin和cmax:主要為標識在同一個事務中多個語句命令的序列值。用于同一個事務中實現版本可見性判斷。

        1.下面我們先來看一下xmin和xmax的變化:

        PostgreSQL MVCC 源碼實現

        從上圖可以看出,4條記錄的xmin是一樣的,都是“3906”,這說明是在同一個事務中創建的。另外xmax都為“0”,說明都沒有被刪除。cmin和cmax都是1,說明是同一個命令創建的。

        接下來,我們update一下id為1的記錄,看發生什么情況:

        update之后,并沒有提交,重新開起另外一個窗口,查詢:

        PostgreSQL MVCC 源碼實現

        我們看到,ID為1的記錄,只有xmin沒有變化,其它三個值都發生了變化,其中xmax變成了”390691”。

        然后我把事務提交掉,再在新窗口中查詢:

        PostgreSQL MVCC 源碼實現

        我們看到,提交后,ID 為1的記錄,xmin變為“390691”,xmin增加了1;而xmax變成了0。

        從上面的案例中,我們從表面上可以看出,xmin增加了。但是事實上,PostgreSQL在底層所做的事情,遠比這個要多。底層已經生成了一個新版本的tuple,新版本tuple的xmin等于老版本的xmax。

        詳細的internal,我后面再展開講。

        2.我們再來看一下cmin和cmax的變化:

        我起一個事務,包含兩條update,,一條update ID值為2的記錄,一條insert ID值為3的記錄:

        PostgreSQL MVCC 源碼實現

        事務“390694”中,cmin和cmax的值,依次遞增。從目前來看cmin和cmax實際上是同一個field。

        源碼定義如下,用union實現了CommandId,是一個combo command id。

        PostgreSQL MVCC 源碼實現

        因此,從上面的例子來看,PostgreSQL的mvcc實現是比較簡單的。只需要通過對比tuple header中xmin,xmax,cmin,cmax與當前的xid,就可以得到在scan tuple時,此tuple對于當前查詢的可視性。

        可見性判斷邏輯:

        PostgreSQL MVCC 源碼實現

        但是也帶來了另外一個問題:就是在沒有undo的情況下,會導致空間的增長。因此PostgreSQL引入了vacumm后臺進程,來定期清理這些 DEAD tuple。

        關于vacumm的原理,我后面開寫一篇文章。

        ------------------------------------華麗麗的分割線------------------------------------

        CentOS 6.3環境下yum安裝PostgreSQL 9.3

        PostgreSQL緩存詳述

        Windows平臺編譯 PostgreSQL

        Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝

        Ubuntu上的phppgAdmin安裝及配置

        CentOS平臺下安裝PostgreSQL9.3

        PostgreSQL配置Streaming Replication集群

        如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin

        ------------------------------------華麗麗的分割線------------------------------------

        PostgreSQL 的詳細介紹:請點這里
        PostgreSQL 的下載地址:請點這里

        本文永久更新鏈接地址:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        PostgreSQLMVCC源碼實現

        PostgreSQLMVCC源碼實現:MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一定程度上 MVCC對每一個DBA來講,都不陌生,即多版本控制(Multi-Version-Control)。正因為數據有了多個版本,才實現了讀和寫在一
        推薦度:
        標簽: 實現 源碼 post
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top 主站蜘蛛池模板: 免费的黄色网页在线免费观看| 精品亚洲成A人无码成A在线观看| 特级aaaaaaaaa毛片免费视频| 好男人视频在线观看免费看片| 亚洲国产熟亚洲女视频| 免费看美女让人桶尿口| 亚洲精品人成网在线播放影院| 一级女人18毛片免费| 亚洲欧美日韩自偷自拍| 韩国二级毛片免费播放| 青娱乐在线免费观看视频| 无码欧精品亚洲日韩一区夜夜嗨| 亚洲av无码成h人动漫无遮挡| 久久免费精品视频| 亚洲视频精品在线观看| 亚洲免费综合色在线视频| 亚洲日本一线产区和二线产区对比| 永久免费无码网站在线观看| 日本永久免费a∨在线视频| 国产成人亚洲综合无码精品| 性xxxx视频免费播放直播 | 久久国产精品免费视频| 在线观看视频免费国语| 男女猛烈xx00免费视频试看| 亚洲综合激情另类专区| 亚洲国产aⅴ成人精品无吗| 日韩精品亚洲专区在线观看| 99精品免费视品| 久久狠狠爱亚洲综合影院| 免费看小12萝裸体视频国产 | 免费在线看污视频| 亚洲av一本岛在线播放| 国产免费观看黄AV片| 久草免费福利视频| 国产成人亚洲综合网站不卡| 中文字幕亚洲日本岛国片| 午夜在线免费视频| 亚洲国产精品yw在线观看| 精品一区二区三区无码免费视频| 成人亚洲国产va天堂| 亚洲国产精品无码久久久不卡|