欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql隔離性之Read View的用法說明

 更新時間:2021年03月25日 11:42:05   作者:Drogon Brother  
這篇文章主要介紹了Mysql隔離性之Read View的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

當前事務能讀取到哪個歷史版本?

Read View是事務開啟時,當前所有事務的一個集合,這個數(shù)據(jù)結構中存儲了當前Read View中最大的ID及最小的ID。

這就是當前活躍事務列表,如下所示:

ct-trx --> trx11 --> trx9 --> trx6 --> trx5 --> trx3;

ct-trx 表示當前事務的id,對應上面的read_view數(shù)據(jù)結構如下,

read_view->creator_trx_id = ct-trx;
read_view->up_limit_id = trx3; 低水位
read_view->low_limit_id = trx11; 高水位
read_view->trx_ids = [trx11, trx9, trx6, trx5, trx3];

low_limit_id是“高水位”,即當時活躍事務的最大id,如果讀到row的db_trx_id>=low_limit_id,說明這些id在此之前的數(shù)據(jù)都沒有提交,如注釋中的描述,這些數(shù)據(jù)都不可見。

if (trx_id >= view->low_limit_id) {
return(FALSE);
}

注:readview 部分源碼

up_limit_id是“低水位”,即當時活躍事務列表的最小事務id,如果row的db_trx_id<up_limit_id,說明這些數(shù)據(jù)在事務創(chuàng)建id的時都已經(jīng)提交,如注釋中的描述,這些數(shù)據(jù)均可見。

if (trx_id < view->up_limit_id) {
return(TRUE);
}

row的db_trx_id在low_limit_id和up_limit_id之間,則查找該記錄的db_trx_id是否在自己事務的read_view->trx_ids列表中,如果在則該記錄的當前版本不可見,否則該記錄的當前版本可見。

不同隔離級別ReadView實現(xiàn)方式

1. read-commited:

即:在每次語句執(zhí)行的過程中,都關閉read_view, 重新在row_search_for_mysql函數(shù)中創(chuàng)建當前的一份read_view。這樣就會產(chǎn)生不可重復讀現(xiàn)象發(fā)生。

2. repeatable read:

在repeatable read的隔離級別下,創(chuàng)建事務trx結構的時候,就生成了當前的global read view。使用trx_assign_read_view函數(shù)創(chuàng)建,一直維持到事務結束。在事務結束這段時間內(nèi) 每一次查詢都不會重新重建Read View , 從而實現(xiàn)了可重復讀。

補充:mysql的mvcc和readview

隔離級別標準定義:

read uncommited 一個事務讀取到了另一個事務未提交的結果(可能發(fā)生回滾),叫臟讀,這會帶來臟讀、幻讀、不可重復讀問題

read commited 一個事務a讀取到了另一個事務b最新提交的結果,使得事務a兩次讀取的結果不同,其避免了臟讀,會出現(xiàn)不可重復讀,幻讀,通過版本鏈(mvcc)和readview實現(xiàn)。

repeatable read(mysql的默認隔離級別) 一個事務第一次讀過某條記錄后,另一個事務修改提交了該條記錄后,事務a讀取到的還是第一次的值,這就是可重復讀,同一個事務中多次讀取相同的數(shù)據(jù)返回的結果是一樣的。事務不會讀到其他事務對已有數(shù)據(jù)的修改,即使其他事務已提交,也就是說,事務開始時讀到的已有數(shù)據(jù)是什么,在事務提交前的任意時刻,這些數(shù)據(jù)的值都是一樣的。但是,對于其他事務新插入的數(shù)據(jù)是可以讀到的,這也就引發(fā)了幻讀問題。其避免了臟讀和不可重復讀問題,但幻讀依然存在。還是會出現(xiàn)幻讀,(但是mysql解決了幻讀的問題),通過版本鏈和readview實現(xiàn)

serializable 不允許對同一行記錄的讀和寫的并發(fā)操作,必需串行執(zhí)行,所以不會出現(xiàn)幻讀,臟讀現(xiàn)象

在mysql中讀已提交和可重復讀事務隔離級別是通過mvcc和readview實現(xiàn)的

mvcc即Multi-Version Concurrency Control,多版本并發(fā)控制,維護一個數(shù)據(jù)的多個版本,使得事務之間的讀寫按照隔離級別獲取相應的結果,不發(fā)生沖突

對于隔離級別read committed,每次都生成一個新的readview

對于隔離級別repeatable read,只在事務開啟時,生成一個readview,直到事務提交,不發(fā)生變化,所以可以保證可重復讀。

生成readview時

m_ids:表示活躍事務id列表

min_trx_id:活躍事務中的最小事務id

max_trx_id:已創(chuàng)建的最大事務id

creator_trx_id:當前的事務id

對當前事務來說,按照以下規(guī)則從最新的版本開始遍歷,獲取對應的版本記錄。

1、被訪問的trx_id與readview中的creator_trx_id相同,表示當前事務在訪問自己修改的記錄,可見,返回;

2、被訪問的trx_id小于min_trx_id,表明該版本已提交,可見,返回;

3、被訪問的trx_id大于等于max_trx_id,表明該版本在生成readview時,還未開啟,不可見,返回;

4、被訪問的trx_id在min_trx_id和max_trx_id之間,判斷是否在m_ids中,如果在,則說明生成readview時,該版本事務未提交,該版本不可見;如果不在,則說明生成readview時,該版本事務已提交可見,返回。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • 快速修改mysql密碼的四種方法示例詳解

    快速修改mysql密碼的四種方法示例詳解

    mysql密碼忘記怎么辦,如何快速修改mysql密碼,下面給大家?guī)硭姆N方法快速修改mysql密碼,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • 一鍵搭建MYSQL主從,輕松應對數(shù)據(jù)備份與恢復

    一鍵搭建MYSQL主從,輕松應對數(shù)據(jù)備份與恢復

    MYSQL主從是一種常見的數(shù)據(jù)庫架構,它可以提高數(shù)據(jù)庫的可用性和性能,在主從架構中,主數(shù)據(jù)庫負責處理寫操作,而從數(shù)據(jù)庫負責處理讀操作,當主數(shù)據(jù)庫發(fā)生故障時,從數(shù)據(jù)庫可以接管并繼續(xù)提供服務,從而實現(xiàn)高可用性,需要的朋友可以參考下
    2023-10-10
  • MySQL字符串前綴索引使用

    MySQL字符串前綴索引使用

    本文主要介紹了MySQL字符串前綴索引使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 淺談MySQL 統(tǒng)計行數(shù)的 count

    淺談MySQL 統(tǒng)計行數(shù)的 count

    這篇文章主要介紹了MySQL 統(tǒng)計行數(shù)的 count的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • windows環(huán)境下Mysql中文亂碼問題解決方法

    windows環(huán)境下Mysql中文亂碼問題解決方法

    在搭建Mysql環(huán)境的時候遇到了中文亂碼問題,下面與大家分享下具體的解決方法,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-06-06
  • 在MySQL中存儲圖片的操作步驟

    在MySQL中存儲圖片的操作步驟

    之前遇到一個問題,就是在將項目遷移到別的服務器的時候出現(xiàn)圖片路徑不對的問題,因為存放圖片的方式是在數(shù)據(jù)庫中存放圖片路徑,但是路徑前卻帶了域名,所以本文將給大家介紹在MySQL中存儲圖片的操作步驟,需要的朋友可以參考下
    2024-04-04
  • MySQL中SQL分頁查詢的幾種實現(xiàn)方法及優(yōu)缺點

    MySQL中SQL分頁查詢的幾種實現(xiàn)方法及優(yōu)缺點

    這篇文章主要介紹了MySQL中SQL分頁查詢的幾種實現(xiàn)方法及優(yōu)缺點, 分頁查詢就是在滿足條件的一堆有序數(shù)據(jù)中截取當前所需要展示的那部分。對此感興趣的可以來了解一下
    2020-07-07
  • Mysql優(yōu)化之Zabbix分區(qū)優(yōu)化

    Mysql優(yōu)化之Zabbix分區(qū)優(yōu)化

    這篇文章主要介紹了Mysql優(yōu)化中Zabbix分區(qū)優(yōu)化的詳細方法和優(yōu)缺點分析,一起學習下。
    2017-11-11
  • lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法

    這篇文章給大家介紹了lnmp重置mysql數(shù)據(jù)庫root密碼的兩種方法,第一種方法通過腳本重置密碼,第二種方法通過命令修改,具體操作方法大家參考下本文
    2017-07-07
  • mysql查詢的時候給字段賦默認值操作

    mysql查詢的時候給字段賦默認值操作

    這篇文章主要介紹了mysql查詢的時候給字段賦默認值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論