<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQLMVCC實現(xiàn)及其機制_MySQL

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 17:55:18
        文檔

        MySQLMVCC實現(xiàn)及其機制_MySQL

        MySQLMVCC實現(xiàn)及其機制_MySQL:Multi-Version Concurrency Control 多版本并發(fā)控制 大多數(shù)的MySQL事務(wù)型存儲引擎,如InnoDB,F(xiàn)alcon以及PBXT都不使用一種簡單的行鎖機制。事實上,他們都和和另外一種用來增加并發(fā)性的被稱為“多版本并發(fā)控制(MVCC)”的機制來一
        推薦度:
        導(dǎo)讀MySQLMVCC實現(xiàn)及其機制_MySQL:Multi-Version Concurrency Control 多版本并發(fā)控制 大多數(shù)的MySQL事務(wù)型存儲引擎,如InnoDB,F(xiàn)alcon以及PBXT都不使用一種簡單的行鎖機制。事實上,他們都和和另外一種用來增加并發(fā)性的被稱為“多版本并發(fā)控制(MVCC)”的機制來一

        Multi-Version Concurrency Control 多版本并發(fā)控制  

        大多數(shù)的MySQL事務(wù)型存儲引擎,如InnoDB,F(xiàn)alcon以及PBXT都不使用一種簡單的行鎖機制。

        事實上,他們都和和另外一種用來增加并發(fā)性的被稱為“多版本并發(fā)控制(MVCC)”的機制來一直使用。

        MVCC不只使用在MySQL中,Oracle,PostgreSQL以及其他一些數(shù)據(jù)為系統(tǒng)也同樣使用它。   

        你可將將MVCC看成行級別鎖的一種妥協(xié),它在許多情況下避免了使用鎖,同時可以提供更小的開銷。

        根據(jù)實現(xiàn)的不同,它可以允許非阻塞式讀,在寫操作進行時只鎖定必要的記錄。   

        MVCC會保存某個時間點上的數(shù)據(jù)快照。

        這意味闃事務(wù)可以看到一個一致的數(shù)據(jù)視圖,不管他們需要跑多久。

        這同時也意味著不同的事務(wù)在同一個時間點看到的同一個表的數(shù)據(jù)可能是不同的。

        如果你從來沒有過種體驗的話,可能理解起來比較抽象,但是隨著慢慢地熟悉這種理解將會很容易。   

        各個存儲引擎對于MVCC的實現(xiàn)各不相同。

        這些不同中的一些包括樂觀和悲觀并發(fā)控制。

        我們將通過一個簡化的InnoDB版本的行為來展示MVCC工作的一個側(cè)面。   

        InnoDB:通過為每一行記錄添加兩個額外的隱藏的值來實現(xiàn)MVCC,這兩個值一個記錄這行數(shù)據(jù)何時被創(chuàng)建,另外一個記錄這行數(shù)據(jù)何時過期(或者被刪除)。但是InnoDB并不存儲這些事件發(fā)生時的實際時間,相反它只存儲這些事件發(fā)生時的系統(tǒng)版本號。這是一個隨著事務(wù)的創(chuàng)建而不斷增長的數(shù)字。每個事務(wù)在事務(wù)開始時會記錄它自己的系統(tǒng)版本號。每個查詢必須去檢查每行數(shù)據(jù)的版本號與事務(wù)的版本號是否相同。讓我們來看看當(dāng)隔離級別是REPEATABLE READ時這種策略是如何應(yīng)用到特定的操作的:   SELECT InnoDB必須每行數(shù)據(jù)來保證它符合兩個條件:   

        1、InnoDB必須找到一個行的版本,它至少要和事務(wù)的版本一樣老(也即它的版本號不大于事務(wù)的版本號)。這保證了不管是事務(wù)開始之前,或者事務(wù)創(chuàng)建時,或者修改了這行數(shù)據(jù)的時候,這行數(shù)據(jù)是存在的。   

        2、這行數(shù)據(jù)的刪除版本必須是未定義的或者比事務(wù)版本要大。這可以保證在事務(wù)開始之前這行數(shù)據(jù)沒有被刪除。   

        符合這兩個條件的行可能會被當(dāng)作查詢結(jié)果而返回。   

        INSERT:InnoDB為這個新行記錄當(dāng)前的系統(tǒng)版本號。   

        DELETE:InnoDB將當(dāng)前的系統(tǒng)版本號設(shè)置為這一行的刪除ID。   

        UPDATE:InnoDB會寫一個這行數(shù)據(jù)的新拷貝,這個拷貝的版本為當(dāng)前的系統(tǒng)版本號。

        它同時也會將這個版本號寫到舊行的刪除版本里。   

        這種額外的記錄所帶來的結(jié)果就是對于大多數(shù)查詢來說根本就不需要獲得一個鎖。

        他們只是簡單地以最快的速度來讀取數(shù)據(jù),確保只選擇符合條件的行。

        這個方案的缺點在于存儲引擎必須為每一行存儲更多的數(shù)據(jù),做更多的檢查工作,處理更多的善后操作。   

        MVCC只工作在REPEATABLE READ和READ COMMITED隔離級別下。

        READ UNCOMMITED不是MVCC兼容的,因為查詢不能找到適合他們事務(wù)版本的行版本;

        它們每次都只能讀到最新的版本。

        SERIABLABLE也不與MVCC兼容,因為讀操作會鎖定他們返回的每一行數(shù)據(jù)[1]。

        編輯本段說明

        通過使用MVCC(Multi-Version Concurrency Control)算法自動提供并發(fā)控制。MVCC維持一個數(shù)據(jù)的多個版本使讀寫操作沒有沖突。也就是說數(shù)據(jù)元素X上的每一個寫操作產(chǎn)生X的一個新版本,GBase 8m為X的每一個讀操作選擇一個版本。由于消除了數(shù)據(jù)庫中數(shù)據(jù)元素讀和寫操作的沖突,GBase 8m得到優(yōu)化,具有更好的性能。特別是對于數(shù)據(jù)庫讀和寫兩種方法,他們不用等待其他同時進行的相同數(shù)據(jù)寫和讀的完成。在并發(fā)事務(wù)中,數(shù)據(jù)庫寫只等待正在對同一行數(shù)據(jù)進行更新的寫,這是現(xiàn)有的行鎖定方法的弱點。同時MVCC回收不需要的和長時間不用的內(nèi)存,防止內(nèi)存空間的浪費。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進行熱備份。

        編輯本段比鎖定的優(yōu)勢

        使用MVCC多版本并發(fā)控制比鎖定模型的主要優(yōu)點是在MVCC里, 對檢索(讀)數(shù)據(jù)的鎖要求與寫數(shù)據(jù)的鎖要求不沖突, 所以讀不會阻塞寫,而寫也從不阻塞讀?! ≡跀?shù)據(jù)庫里也有表和行級別的鎖定機制, 用于給那些無法輕松接受 MVCC 行為的應(yīng)用。 不過,恰當(dāng)?shù)厥褂?MVCC 總會提供比鎖更好地性能。

        編輯本段GBase8的特性

        在 GBase 中的查詢功能通過 MVCC 提供的一致性非鎖讀(在下文我們簡稱為一致性讀),就是提供通過數(shù)據(jù)庫在一個時間點上的快照來實現(xiàn)信息的查詢。查詢只是對那些在這個時間點之前提交的事務(wù)所做的變更,而并不關(guān)注在時間點之后的變更或未提交的事務(wù)。當(dāng)然,若是該事務(wù)自身進行的變更,對于查詢是可見的?! Base 的默認(rèn)級別是 READ COMMITTED ,在該隔離級別下事務(wù)中的查詢語句,使用當(dāng)前時間戳進行一致性讀,每次查詢的時間戳是不相同的。  但對 REPEATABLE READ 隔離級別,在同一個事務(wù)中的所有一致性讀,使用的時間戳均是第一個查詢的時間戳,這樣讀取的也就是由該事務(wù)第一次讀建立起來的數(shù)據(jù)快照。用戶只有通過提交當(dāng)前事務(wù),并發(fā)出一個新的查詢才會得到新的數(shù)據(jù)快照?! ∫恢滦宰x是 GBase 在 READ COMMITTED 和 REPEATABLE READ 隔離級別下,處理 SELECT 語句中使用的默認(rèn)模式。一致性讀在它讀的數(shù)據(jù)上不設(shè)置任何鎖,因此在一致性讀某個表的同時,其它用戶均可以修改這個表?! ∽⒁庠?DROP TABLE 和 ALTER TABLE 運作時,一致性讀無效 。一致性讀在 DROP TABLE 上無效是因為 GBase 不能使用已經(jīng) drop 的表,該表已經(jīng)刪除。一致性讀在 ALTER TABLE 上無效是因為 GBase 會在事務(wù)內(nèi),重新創(chuàng)建一個新表并從舊表向新表插入記錄。這樣當(dāng)用戶再次執(zhí)行一致性讀時,在新表中將看不到任何行,因為在新表中的數(shù)據(jù)都在第一次一致性讀的快照之外。參考資料
      1. 1

        《高性能MySQL》第二版

      2. 擴展閱讀:
      3. 1

        http://www.gbase.cn/onlineHelp/html/ManagerManual/ch04020202.html

      4. 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQLMVCC實現(xiàn)及其機制_MySQL

        MySQLMVCC實現(xiàn)及其機制_MySQL:Multi-Version Concurrency Control 多版本并發(fā)控制 大多數(shù)的MySQL事務(wù)型存儲引擎,如InnoDB,F(xiàn)alcon以及PBXT都不使用一種簡單的行鎖機制。事實上,他們都和和另外一種用來增加并發(fā)性的被稱為“多版本并發(fā)控制(MVCC)”的機制來一
        推薦度:
        標(biāo)簽: 存儲 mysql 機制
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: www亚洲一级视频com| 亚洲av日韩av不卡在线观看| 破了亲妺妺的处免费视频国产| 国产精品深夜福利免费观看| 亚洲AV无码第一区二区三区| 亚洲另类自拍丝袜第五页| 国产成人无码区免费网站| 夜夜爽免费888视频| 亚洲av无码成h人动漫无遮挡| 福利免费在线观看| 在线免费观看一级片| 亚洲中文字幕久久精品无码VA| 免费无码H肉动漫在线观看麻豆| 亚洲女初尝黑人巨高清| 激情小说亚洲图片| 97人伦色伦成人免费视频| 亚洲va久久久噜噜噜久久狠狠| 精品在线免费观看| 久久亚洲国产精品123区| 亚洲国产精品ⅴa在线观看| 国产黄色免费网站| 亚洲专区在线视频| 51午夜精品免费视频| 免费v片在线观看品善网| 亚洲精品精华液一区二区 | 亚洲第一区香蕉_国产a| h视频在线免费看| 亚洲国产成人一区二区三区| rh男男车车的车车免费网站| 情人伊人久久综合亚洲| 57pao国产成视频免费播放| 亚洲丁香色婷婷综合欲色啪| 国产福利在线免费| 亚洲毛片免费观看| 91精品手机国产免费| 亚洲视频在线一区| 日韩中文字幕免费视频| 99人中文字幕亚洲区| 日本高清免费不卡视频| 亚洲AV无码成人精品区日韩| 在线A级毛片无码免费真人|