回覆列表
  • 1 # 使用者834195712159

    解釋說明如下:

    MySQL的大多數事務型儲存引擎實現的都不是簡單的行級鎖。基於提升併發效能的考慮,它們一般都同時實現了多版本併發控制(MVCC)。不僅僅是MySQL,包括Oracle,PostgreSQL等其他資料庫系統也都實現了MVCC,但是各自的實現機制並不相同,因為MVCC並沒有一個同一的標準。

    可以認為MVCC是行級鎖的一個變種,但是它在很多情況下避免了加鎖操作,因此開銷更低。大多數的MVCC都實現了非阻塞的讀操作,寫操作也只鎖定必要的行。

    MVCC的實現,是透過儲存資料在某個時間點的快照來實現的。也就是說,不管需要執行多長時間,每個事務看到的資料是一致的。根據事務開始的時間不同,每個事物對同一張表,同一時刻看到的資料可能是不一樣的。

    不同儲存引擎的MVCC實現是不同的,典型的有樂觀(optimistic)併發控制和悲觀(pessimistic)併發控制。

    InnoDB的MVCC是透過在每行記錄後面儲存兩個隱藏的列來實現。這兩個列,一個儲存了行的建立時間,一個儲存了行的過期時間(刪除時間)。並且儲存的並不是真實的時間值,而是系統版本號(system version number)。每開始一個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。

  • 中秋節和大豐收的關聯?
  • 寶寶臉上起了好多小紅點怎麼辦?