成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Mvcc機制

IT那活兒 / 2732人閱讀
Mvcc機制
點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了?。?!

mvcc的全稱是(Multi-Version Concurrency Control)多版本并發(fā)控制。此機制是為了解決事務之間同時讀寫造成的鎖導致阻塞。

在數據庫中多個用戶對一張表的操作,可以簡單的概括為三種狀態(tài)。
  • 一張表,多個用戶同時讀取數據。(讀讀)
  • 一張表,一個用戶讀數據,一個用戶寫數據。(讀寫)
  • 一張表,多個用戶同時寫數據。(寫寫)
像是第一種情況不會出現(xiàn)沖突,多個用戶可以同時執(zhí)行。
第三種情況是肯定有沖突不能同時執(zhí)行。

而第二種情況之前有一種很簡單粗暴的解決辦法,就是加鎖但是這樣的效率很低,而mvcc機制則是將表中每次更改的記錄都保存下來,如果有多個用戶進行讀寫操作,那么讀數據的用戶所看到的只會是歷史數據。執(zhí)行寫操作的用戶只要事務沒有提交,在事務中所執(zhí)行的變更對于其他用戶來說都是不可見的。

事務與隔離

1. 事務
什么是事務?
簡單的說,事務就是將多個操作捆綁成一個操作。所有的操作要么同時執(zhí)行成功,要么同時執(zhí)行失敗全部回滾成初始狀態(tài)不會有第三種可能。這就是事務中非常重要的一個概念“原子性”。
  • 一致性:一個事務的執(zhí)行不能破壞數據庫的完整性和一致性,比如如果從A賬戶轉賬到B賬戶,不可能因為A賬戶扣了錢,而B賬戶沒有加錢。
  • 隔離性:是指多個事務并發(fā)執(zhí)行時,應該是互相隔離,不可相互干擾。此性質下文會詳細解釋。
  • 持久性:是指事務一旦提交數據就必須永久保存,就算遇到系統(tǒng)或者服務器的故障也不會丟失。
2. 隔離的四個級別
  • 讀未提交 Read uncommitted

    這個級別可能會遇到一個問題“臟讀”,就是a事務中讀取到了b事務中更改的數據,此時b事務回滾a事務讀到的數據最終未被更改。而a事務后續(xù)所有基于這個數據的操作都是錯誤的。這個就是臟讀。

  • 讀已提交 Read committed

    這個級別不會出現(xiàn)臟讀的問題,但是重復讀的時候可能會發(fā)現(xiàn)多次讀取的結果不一樣。

    舉個例子a事務有兩個查詢x表的數據,第一次查詢值為1。此時b事務執(zhí)行update修改x表值為2。a事務的第二個查詢的值就是2。

  • 讀可重復 Repeatable read

    該級別解決了讀已提交的不可重復讀的問題,在事務開啟的時候,不能再修改操作了,直到該事務提交。(此時的不能修改值得是在事務中修改了也不會生效)。

    舉個例子a事務有兩個查詢x表的數據,第一次查詢值為1。此時b事務執(zhí)行update修改x表值為2。a事務的第二個查詢的值還是1。明明已經被修改但是查詢的結果還是未修改的的值,類似這樣的結果就是幻讀。(在gp中此隔離級別不會出現(xiàn)幻讀)

  • 序列化 Serializable

    在該級別下,事務是按照串行化的順序執(zhí)行,可以避免臟讀,重復讀,幻讀。雖然可以避免以上的幾種問題但是此級別的效率可想而知是非常低的。

在greenplum中每一行數據,有4個隱藏字段。雖然這四個字段是隱藏的,但可以訪問。

  • xmin :在創(chuàng)建(insert)記錄(tuple)時,記錄此值為插入tuple的事務ID。
  • xmax :默認值為0.在刪除tuple時,記錄此值。
  • cmin和cmax :標識在同一個事務中多個語句命令的序列值,從0開始,用于同一個事務中實現(xiàn)版本可見性判斷。

mvcc機制的相關實驗

建表:

開啟一個事務,插入記錄,查看當前的事務號,可以看到隱藏的四個字段值,只有 xmin變成了13511。
開兩個窗口,一個窗口更新數據,一個窗口更新數據前查一次,更新后查一次??梢钥吹絰max已經改變,因為pg更新數據是先刪除后插入所以xmax會發(fā)生變更。
這樣就證明了,greenplum中,讀寫時不沖突的。

本文作者:徐 瑞(上海新炬王翦團隊)

本文來源:“IT那活兒”公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/129407.html

相關文章

  • Pgsql表膨脹的產生及處理

    Pgsql表膨脹的產生及處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; marg...

    IT那活兒 評論0 收藏2845
  • 聊聊PostgreSQL事務id那點事

    聊聊PostgreSQL事務id那點事 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    IT那活兒 評論0 收藏2014
  • PostgreSQL鎖淺析

    PostgreSQL鎖淺析 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margi...

    IT那活兒 評論0 收藏74
  • 三年百度,五年阿里,阿里p8架構師淺談:我是如何順利進入BAT

    摘要:三年百度,五年阿里,阿里架構師淺談我是如何順利進入前些天在我群里認識了以為挺有意思的老哥,他也是工作年多技術和面試都不差,最近也是在找工作,是從京城來魔都的,也和他撈了不少。 說來慚愧,也不怕你們笑話。做開發(fā)8年多,到目前還是一名不折不扣的掃地僧。年前的辭職,到現(xiàn)在還在家靜養(yǎng)中。其實也沒什么,就是回家總結一下自己這些年來在外工作與面試等做一個簡單的總結與反思。做一下自己后面一個人生規(guī)劃...

    seanlook 評論0 收藏0
  • 為什么開發(fā)人員必須要了解數據庫鎖?

    摘要:小明馬上開發(fā)完畢,成功上線。下班過后,小明回想大紅說的話,什么是間隙鎖,什么是插入意向鎖,看來作為開發(fā)者對數據庫不應該只會寫啊,不然遇到一些疑難雜癥完全沒法解決啊。破壞了數據庫中的隔離性。 1.鎖? 1.1何為鎖 鎖在現(xiàn)實中的意義為:封閉的器物,以鑰匙或暗碼開啟。在計算機中的鎖一般用來管理對共享資源的并發(fā)訪問,比如我們java同學熟悉的Lock,synchronized等都是我們常見的...

    AbnerMing 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<