国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Mvcc機制

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

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

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

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

事務與隔離

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

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

  • 讀已提交 Read committed

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

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

  • 讀可重復 Repeatable read

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

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

  • 序列化 Serializable

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

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

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

mvcc機制的相關實驗

建表:

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

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

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

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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

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

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

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

    AbnerMing 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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