婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PostgreSQL數據庫事務實現方法分析

PostgreSQL數據庫事務實現方法分析

熱門標簽:重慶自動外呼系統定制 漯河外呼電話系統 打電話智能電銷機器人授權 合肥公司外呼系統運營商 外呼調研系統 美容工作室地圖標注 地圖標注和圖片名稱的區別 海豐有多少商家沒有地圖標注 辦公外呼電話系統

本文實例講述了PostgreSQL數據庫事務實現方法。分享給大家供大家參考,具體如下:

事務簡介

  • 事務管理器:有限狀態機
    • 日志管理器
      • CLOG:事務的執行結果
      • XLOG:undo/redo日志
    • 鎖管理器:實現并發控制,讀階段采用MVCC,寫階段采用鎖控制實現不同的隔離級別

事務是所有數據庫系統的一個基本概念。 一次事務的要點就是它把多個步驟捆綁成了一個單一的,不成功則成仁的操作。 其它并發的事務是看不到在這些步驟之間的中間狀態的,并且如果發生了一些問題, 導致該事務無法完成,那么所有這些步驟都完全不會影響數據庫。PostgreSQL為每條事務創建一個postgre進程,并發執行事務。采用分層的機制執行事務,上層事務塊和底層事務。上層事務塊是用戶眼中的事務,用于控制事務執行的狀態;底層事務是事務中的每條語句,可以改變上層事務塊的狀態。

上層事務塊

每個postgre進程只有一個事務塊,上層事務塊記錄著本次事務執行過程中的各個狀態。

typedef enum TBlockState
{
  /* not-in-transaction-block states */
  TBLOCK_DEFAULT,       /* idle */
  TBLOCK_STARTED,       /* 執行簡單查詢事務 */
  /* transaction block states */
  TBLOCK_BEGIN,        /* 遇見事務開始BEGIN */
  TBLOCK_INPROGRESS,     /* 事務正在執行中 */
  TBLOCK_PARALLEL_INPROGRESS, /* live transaction inside parallel worker */
  TBLOCK_END,         /* 遇見事務結束COMMIT/END的時候設置 */
  TBLOCK_ABORT,        /* 事務出錯,等待ROLLBACK */
  TBLOCK_ABORT_END,      /* 事務出錯,收到ROLLBACK */
  TBLOCK_ABORT_PENDING,    /* 事務處理中,接收到ROLLBACK */
  TBLOCK_PREPARE,       /* 事務處理中,收到PREPARE(分布式事務) */
  /* subtransaction states */
  TBLOCK_SUBBEGIN,      /* starting a subtransaction */
  TBLOCK_SUBINPROGRESS,    /* live subtransaction */
  TBLOCK_SUBRELEASE,     /* RELEASE received */
  TBLOCK_SUBCOMMIT,      /* COMMIT received while TBLOCK_SUBINPROGRESS */
  TBLOCK_SUBABORT,      /* failed subxact, awaiting ROLLBACK */
  TBLOCK_SUBABORT_END,    /* failed subxact, ROLLBACK received */
  TBLOCK_SUBABORT_PENDING,  /* live subxact, ROLLBACK received */
  TBLOCK_SUBRESTART,     /* live subxact, ROLLBACK TO received */
  TBLOCK_SUBABORT_RESTART   /* failed subxact, ROLLBACK TO received */
} TBlockState;

常見的事務塊狀態轉換圖

 

  • startTransactionCommand:事務塊中每條語句執行前都會調用。
  • commitTransactionCommand:事務塊中每條語句執行結束都會調用
  • abortCurrentTransaction:事務塊中語句執行錯誤,在調用點調用
  • BeginTransactionBlock:遇見BEGIN命令調用,狀態變為TBLOCK_BEGIN
  • EndTransactionBlock:遇見END調用,可能成功提交,也可能回滾
  • AbortTransactionBlock:遇見ABORT指令調用

底層事務

底層事務是需要執行的每條命令,負責處理資源和鎖的獲取和釋放,信號的處理,日志記錄等等

typedef enum TransState
{
  TRANS_DEFAULT,       /* idle */
  TRANS_START,        /* transaction starting */
  TRANS_INPROGRESS,      /* inside a valid transaction */
  TRANS_COMMIT,        /* commit in progress */
  TRANS_ABORT,        /* abort in progress */
  TRANS_PREPARE        /* prepare in progress */
} TransState;

主要有四個函數:

  • StartTransaction:由BEGIN的startTransactionCommand調用,調用結束后事務塊狀態為TBLOCK_STARTED
  • CommitTransaction:由END的commitTransactionCommand調用,提交事務
  • AbortTransaction和CleanupTransaction:釋放資源,恢復默認狀態

分布式事務

PostgreSQL提供了分布式事務中的,兩階段提交的接口

并發控制

PostgreSQL采用MVCC的方式進行并發控制,每個事務看到的是一段時間前的數據快照。同時,MVCC并不能夠解決所有問題,所以也提供了行級和表級的鎖。

標準的事務隔離級別有4個,而PostgreSQL只實現了讀已提交和可串行化。

PostgreSQL實現了8種鎖(可怕)

 

太多了,就記住幾個吧。

  • 行共享鎖:select for update/for share
  • 表共享鎖:select
  • 行排他鎖:insert/update/delete
  • 表排他鎖:drop

加鎖的對象

    • 表鎖
    • 會話鎖
    • 擴展鎖:新增表空間
  • 頁:對索引頁面
  • 元組:
  • 事務:

死鎖處理

 

  • postgresql檢測出最后一個等待的殺掉,oracle是第一個等待的殺掉
  • 死鎖檢測算法(等待圖)

MVCC

關鍵詞:

  • 基于事務ID
  • 行級多版本
  • 無回滾段,行內存儲
    • 一次UPDATE,產生記錄兩個版本
    • 兩個版本都存在頁面內部
typedef struct HeapTupleFields
{
  TransactionId t_xmin;    /* Insert,Update事務 */
  TransactionId t_xmax;    /* Delete,Update,Row Locks事務ID */
  union
  {
    CommandId  t_cid;   /* 操作ID */
    TransactionId t_xvac;  /* old-style VACUUM FULL xact ID */
  }      t_field3;
} HeapTupleFields;

cmin:插入該元組的命令在插入事務中的命令標識(從0開始累加)
cmax:刪除該元組的命令在插入事務中的命令標識(從0開始累加)
ctid:相當于rowid , 數據塊ID,偏移量>
XID:事務ID
Xid_snapshot:當前系統中未提交的事務
CLOG:事務狀態日志(已提交的日志)

隔離級別

  1. RC:讀已提交
    1. 兩個事務可以并發更新同一行
    2. 一個事務更新,一個事務刪除同一行,刪除操作會上鎖
  2. RR:讀未提交,其實是snapshot isolation,(沖突狀態會回滾)
  3. 可串行化:serialize snapshot isolation,比標準可串行化要高,通過加內存中的意向鎖實現,不允許預加鎖的數據被其他事務變更

數據可見性判斷

  1. 記錄的頭部XID信息比當前事務更早(rr和ssi有這個要求,read commited沒有這個要求,讀已經提交可以讀未來的事務!!)
  2. 記錄頭部的XID信息不在當前的XID_snapshot中,(記錄上的事務狀態不是未提交的事務)
  3. 記錄頭部的XID信息在CLOG中代表已提交。
  • MVCC需要判斷該行數據在這個事務中的有效性,可見性,可更新性(需要鎖的幫助才能正確執行隔離級別)
  • 判斷條件:若xmin等于當前事務ID,則包含所有xmax=0(未被刪除)的元組。
    若與xmin相等的事務ID對應的事務已經被提交,則包含所有xmax=0或xmax為當前事務ID的元組。
  • 實現概要
    • 對讀不用加鎖,對寫加鎖(只阻塞寫),事務結束對比是否沖突

多行數據需要過期版本回收

  1. 頁面級:頁面訪問時回收
  2. 表級/系統級: autovacuum; vacuum

日志

  1. pg_log:數據庫活動日志(也就是數據庫的操作日志);
  2. pg_xlog:事務日志,記錄事務的執行過程,redo日志
  3. pg_clog:事務狀態日志(pg_clog是pg_xlog的輔助日志),記錄事務的結果。

希望本文所述對大家PostgreSQL數據庫程序設計有所幫助。

您可能感興趣的文章:
  • 用PostgreSQL數據庫做地理位置app應用
  • Python實現連接postgresql數據庫的方法分析
  • C# 操作PostgreSQL 數據庫的示例代碼
  • 在Ubuntu中安裝Postgresql數據庫的步驟詳解
  • 詳解PostgreSql數據庫對象信息及應用

標簽:烏海 蚌埠 衡陽 來賓 珠海 株洲 晉城 錦州

巨人網絡通訊聲明:本文標題《PostgreSQL數據庫事務實現方法分析》,本文關鍵詞  PostgreSQL,數據庫,事務,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL數據庫事務實現方法分析》相關的同類信息!
  • 本頁收集關于PostgreSQL數據庫事務實現方法分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美精品丝袜久久久中文字幕| 欧美国产成人精品| 久久网站最新地址| 亚洲一区av在线| 高清在线观看日韩| 日韩欧美在线一区二区三区| 亚洲视频 欧洲视频| 国产精品99久久久久久宅男| 欧美另类z0zxhd电影| 亚洲欧美在线视频| 成人晚上爱看视频| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲毛片av在线| 国产河南妇女毛片精品久久久| 欧美日本精品一区二区三区| 亚洲欧洲日韩在线| 成人看片黄a免费看在线| 日韩欧美一区二区不卡| 亚洲成人自拍偷拍| 欧美亚洲综合色| 一区二区三区不卡视频在线观看| 成人美女视频在线观看| 国产欧美日韩视频在线观看| 蜜桃av一区二区三区电影| 91精品国产入口在线| 亚洲一区自拍偷拍| 欧美亚洲另类激情小说| 亚洲一区二区视频在线| 91福利在线播放| 亚洲国产精品麻豆| 欧美日韩一级二级三级| 一区二区理论电影在线观看| 91麻豆6部合集magnet| 最新国产成人在线观看| 一本一道综合狠狠老| 一区二区三区美女| 3d动漫精品啪啪一区二区竹菊| 日日夜夜精品视频天天综合网| 欧美日韩综合一区| 麻豆视频一区二区| 久久久久久久免费视频了| 国产在线精品免费| 国产精品网站在线观看| 99精品久久99久久久久| 一个色在线综合| 欧美一区二区播放| 国产精品小仙女| 国产精品久久久一区麻豆最新章节| 成人av网址在线| 亚洲品质自拍视频| 欧美在线观看一二区| 秋霞电影一区二区| 国产视频亚洲色图| 色婷婷综合激情| 日韩av在线播放中文字幕| ww久久中文字幕| 91蜜桃网址入口| 日本不卡高清视频| 日本一区二区动态图| 91成人网在线| 捆绑调教美女网站视频一区| 国产色爱av资源综合区| 欧美中文字幕亚洲一区二区va在线| 日本亚洲三级在线| 国产精品久久久久一区二区三区| 欧洲av在线精品| 国产一区二区三区四区五区美女| 18涩涩午夜精品.www| 日韩一区二区三区在线| 成人网男人的天堂| 免费成人在线播放| 亚洲特黄一级片| 日韩精品一区二区三区视频| 99riav久久精品riav| 美女视频黄久久| 亚洲激情欧美激情| 久久久精品人体av艺术| 欧美色老头old∨ideo| 国产·精品毛片| 麻豆一区二区在线| 亚洲一二三区在线观看| 国产精品久久久久aaaa| 久久新电视剧免费观看| 欧美日韩免费观看一区三区| 成人午夜av在线| 国产一区二区三区四区在线观看| 亚洲成va人在线观看| 亚洲欧洲www| 久久久久久久久99精品| 91精品国产综合久久蜜臀 | 国产精品传媒入口麻豆| 欧美伦理影视网| 91黄色免费版| 94色蜜桃网一区二区三区| 国产精品白丝jk黑袜喷水| 美女视频黄免费的久久| 婷婷国产在线综合| 亚洲第一久久影院| 亚洲精品乱码久久久久久黑人| 国产精品视频麻豆| 国产片一区二区三区| 久久久久久久久久久久电影| 日韩一区二区在线看| 日韩一区二区三区在线视频| 欧美酷刑日本凌虐凌虐| 欧美人狂配大交3d怪物一区| 欧美日韩国产经典色站一区二区三区 | 亚洲精品乱码久久久久久日本蜜臀| 国产免费观看久久| 久久久久久麻豆| 国产拍欧美日韩视频二区| 精品精品国产高清a毛片牛牛 | 国产大陆亚洲精品国产| 国产福利一区二区| 懂色一区二区三区免费观看| 国产精品18久久久久久久网站| 国产综合久久久久久久久久久久| 狠狠色丁香九九婷婷综合五月| 蜜臂av日日欢夜夜爽一区| 美国一区二区三区在线播放| 久久成人羞羞网站| 国产裸体歌舞团一区二区| 国产精品综合视频| 不卡av在线免费观看| 色综合久久88色综合天天6 | 欧美亚洲国产一区二区三区 | 日本高清视频一区二区| 色天使久久综合网天天| 欧美日韩国产一级片| 日韩一区二区三区av| 久久精品亚洲乱码伦伦中文| 亚洲视频免费在线| 日韩vs国产vs欧美| 成人视屏免费看| 欧美三级午夜理伦三级中视频| 欧美一区二区三区成人| 亚洲国产精华液网站w| 亚洲丝袜另类动漫二区| 亚洲午夜视频在线观看| 美日韩一区二区| 北岛玲一区二区三区四区| 欧美性猛交xxxxxx富婆| 精品处破学生在线二十三| 自拍视频在线观看一区二区| 首页亚洲欧美制服丝腿| 国产xxx精品视频大全| 在线国产电影不卡| 久久青草国产手机看片福利盒子| 国产精品国产a| 免费观看日韩电影| 色婷婷久久99综合精品jk白丝| 91.com在线观看| 中国色在线观看另类| 午夜欧美视频在线观看| 福利一区福利二区| 69av一区二区三区| 国产精品另类一区| 久久精品国产一区二区三| 色欧美片视频在线观看在线视频| 日韩视频免费直播| 亚洲精品中文在线观看| 国产999精品久久| 91精品国产一区二区人妖| 1024成人网色www| 韩国女主播一区| 在线成人高清不卡| 亚洲一区免费观看| 成人av资源在线| ww久久中文字幕| 蜜桃视频在线观看一区| 日本伦理一区二区| 中文字幕亚洲视频| 国产精品99久久久久久似苏梦涵| 在线不卡中文字幕播放| 亚洲一区二区三区四区五区黄| 粉嫩aⅴ一区二区三区四区五区| 欧美电影精品一区二区 | 亚洲精品日韩专区silk| av在线不卡免费看| 久久在线免费观看| 国内精品久久久久影院薰衣草 | 久草这里只有精品视频| 欧美日韩一级大片网址| 亚洲一区二区欧美激情| 91福利在线观看| 一区二区欧美视频| 欧美亚洲精品一区| 亚洲成人777| 欧美一级在线视频| 麻豆精品在线视频| 精品国免费一区二区三区| 另类成人小视频在线| 欧美电影免费提供在线观看| 蜜臀精品一区二区三区在线观看| 欧美丰满嫩嫩电影| 日本va欧美va瓶| 久久女同精品一区二区| 国产ts人妖一区二区| 国产精品色呦呦| 色婷婷综合中文久久一本|