日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MYSQL MVCC实现及其机制

發布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MYSQL MVCC实现及其机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多版本并發控制

  Multiversion Concurrency Control

  大部分的MySQL的存儲 引擎,比如InnoDB,Falcon,以及PBXT并不是簡簡單單的使用行鎖機制。它們都使用了行鎖結合一種提高并發的技術,被稱為MVCC(多版本并 發控制)。MVCC并不單單應用在MySQL中,其他的數據庫如Oracle,PostgreSQL,以及其他數據庫也使用這個技術。

  MVCC避免了許多需要加鎖的情形以及降低消耗。這取決于它實現的方式,它允許非阻塞讀取,在寫的操作的時候阻塞必要的記錄。

  MVCC保存了某一時刻數據的一個快照。意思就是無論事物運行了多久,它們都能看到一致的數據。也就是說在相同的時間下,不同的事物看相同表的數據是不同的。如果你從來沒有這方面的經驗,可能說這些有點令人困惑。但是在以后這個會很容易理解和熟悉的。

  每個存儲引擎實現MVCC方式都是不同的。有許多種包含了樂觀(optimistic)和悲觀(pessimistic)的并發控制。我們用簡單的InnoDb的行為來舉例說明MVCC工作方式。

   InnoDB實現MVCC的方法是,它存儲了每一行的兩個額外的隱藏字段,這兩個隱藏字段分別記錄了行的創建的時間和刪除的時間。在每個事件發生的時 候,每行存儲版本號,而不是存儲事件實際發生的時間。每次事物的開始這個版本號都會增加。自記錄時間開始,每個事物都會保存記錄的系統版本號。依照事物的 版本來檢查每行的版本號。在事物隔離級別為可重復讀的情況下,來看看怎樣應用它。

  SELECT

  InnoDB檢查每行,要確定它符合兩個標準。

  InnoDB必須知道行的版本號,這個行的版本號至少要和事物版本號一樣的老。(也就是是說它的版本號可能少于或者和事物版本號相同)。這個既能確定事物開始之前行是存在的,也能確定事物創建或修改了這行。

  行的刪除操作的版本一定是未定義的或者大于事物的版本號。確定了事物開始之前,行沒有被刪除。

  符合了以上兩點。會返回查詢結果。

  INSERT

  InnoDB記錄了當前新增行的系統版本號。

  DELETE

  InnoDB記錄的刪除行的系統版本號作為行的刪除ID。

  UPDATE

  InnoDB復制了一行。這個新行的版本號使用了系統版本號。它也把系統版本號作為了刪除行的版本。

  所有其他記錄的結果保存是,從未獲得鎖的查詢。這樣它們查詢的數據就會盡可能的快。要確定查詢行要遵循這些標準。缺點是存儲引擎要為每一行存儲更多的數據,檢查行的時候要做更多的處理以及其他內部的一些操作。

  MVCC只能在可重復讀和可提交讀的隔離級別下生效。不可提交讀不能使用它的原因是不能讀取符合事物版本的行版本。它們總是讀取最新的行版本。可序列化不能使用MVCC的原因是,它總是要鎖定行。

  下面的表說明了在MySQL中不同鎖的模式以及并發級別。

鎖的策略                   并發性               開銷                 引擎
最低最低MyISAM,Merge,Memory
NDB Cluster
行和MVCC最高最高InnoDB,Falcon,PBXT,solidD

?

總結

以上是生活随笔為你收集整理的MYSQL MVCC实现及其机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。