成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數(shù)據(jù)庫MVCC多版本并發(fā)控制簡介

數(shù)據(jù)庫 MySQL
本文我們主要介紹了MySQL數(shù)據(jù)庫的多版本并發(fā)控制MVCC的知識,希望能夠?qū)δ兴鶐椭?/div>

MySQL數(shù)據(jù)庫的多版本并發(fā)控制MVCC的知識是本文我們主要要介紹的內(nèi)容,接下來就讓我們一起來了解一下這部分內(nèi)容吧。

MVCC

大多數(shù)的MySQL事務(wù)型存儲引擎,如InnoDB,F(xiàn)alcon以及PBXT都不使用一種簡單的行鎖機(jī)制。事實(shí)上,他們都和另外一種用來增加并發(fā)性的被稱為“多版本并發(fā)控制(MVCC)”的機(jī)制來一直使用。MVCC不只使用在MySQL 中,Oracle,PostgreSQL以及其他一些數(shù)據(jù)為系統(tǒng)也同樣使用它。

你可將MVCC看成行級別鎖的一種妥協(xié),它在許多情況下避免了使用鎖,同時可以提供更小的開銷。根據(jù)實(shí)現(xiàn)的不同,它可以允許非阻塞式讀,在寫操作進(jìn)行時只鎖定必要的記錄。MVCC會保存某個時間點(diǎn)上的數(shù)據(jù)快照。這意味闃事務(wù)可以看到一個一致的數(shù)據(jù)視圖,不管他們需要跑多久。這同時也意味著不同的事務(wù)在同一個時間點(diǎn)看到的同一個表的數(shù)據(jù)可能是不同的。如果你從來沒有過種體驗(yàn)的話,可能理解起來比較抽象,但是隨著慢慢地熟悉這種理解將會很容易。

各個存儲引擎對于MVCC的實(shí)現(xiàn)各不相同。這些不同中的一些包括樂觀和悲觀并發(fā)控制。我們將通過一個簡化的InnoDB版本的行為來展示MVCC工作的一個側(cè)面。   InnoDB:通過為每一行記錄添加兩個額外的隱藏的值來實(shí)現(xiàn)MVCC,這兩個值一個記錄這行數(shù)據(jù)何時被創(chuàng)建,另外一個記錄這行數(shù)據(jù)何時過期(或者被刪除)。但是InnoDB并不存儲這些事件發(fā)生時的實(shí)際時間,相反它只存儲這些事件發(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ù),確保只選擇符合條件的行。這個方案的缺點(diǎn)在于存儲引擎必須為每一行存儲更多的數(shù)據(jù),做更多的檢查工作,處理更多的善后操作。

MVCC只工作在REPEATABLE READ和READ COMMITED隔離級別下。READ UNCOMMITED不是MVCC兼容的,因?yàn)椴樵儾荒苷业竭m合他們事務(wù)版本的行版本;它們每次都只能讀到最新的版本。SERIABLABLE也不與 MVCC兼容,因?yàn)樽x操作會鎖定他們返回的每一行數(shù)據(jù)。

說明:

通過使用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ù)庫讀和寫兩種方法,他們不用等待其他同時進(jìn)行的相同數(shù)據(jù)寫和讀的完成。在并發(fā)事務(wù)中,數(shù)據(jù)庫寫只等待正在對同一行數(shù)據(jù)進(jìn)行更新的寫,這是現(xiàn)有的行鎖定方法的弱點(diǎn)。同時MVCC回收不需要的和長時間不用的內(nèi)存,防止內(nèi)存空間的浪費(fèi)。MVCC優(yōu)化了數(shù)據(jù)庫并發(fā)系統(tǒng),使系統(tǒng)在有大量并發(fā)用戶時得到最高的性能,并且可以不用關(guān)閉服務(wù)器就直接進(jìn)行熱備份。

比鎖定的優(yōu)勢

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

GBase8的特性

在GBase中的查詢功能通過 MVCC 提供的一致性非鎖讀(在下文我們簡稱為一致性讀),就是提供通過數(shù)據(jù)庫在一個時間點(diǎn)上的快照來實(shí)現(xiàn)信息的查詢。查詢只是對那些在這個時間點(diǎn)之前提交的事務(wù)所做的變更,而并不關(guān)注在時間點(diǎn)之后的變更或未提交的事務(wù)。當(dāng)然,若是該事務(wù)自身進(jìn)行的變更,對于查詢是可見的。  GBase 的默認(rèn)級別是 READ COMMITTED ,在該隔離級別下事務(wù)中的查詢語句,使用當(dāng)前時間戳進(jìn)行一致性讀,每次查詢的時間戳是不相同的。 

但對REPEATABLE READ 隔離級別,在同一個事務(wù)中的所有一致性讀,使用的時間戳均是第一個查詢的時間戳,這樣讀取的也就是由該事務(wù)第一次讀建立起來的數(shù)據(jù)快照。用戶只有通過提交當(dāng)前事務(wù),并發(fā)出一個新的查詢才會得到新的數(shù)據(jù)快照。一致性讀是 GBase 在 READ COMMITTED 和 REPEATABLE READ 隔離級別下,處理 SELECT 語句中使用的默認(rèn)模式。一致性讀在它讀的數(shù)據(jù)上不設(shè)置任何鎖,因此在一致性讀某個表的同時,其它用戶均可以修改這個表。

注意在 DROP TABLE 和 ALTER TABLE 運(yùn)作時,一致性讀無效 。一致性讀在 DROP TABLE 上無效是因?yàn)?GBase 不能使用已經(jīng) drop 的表,該表已經(jīng)刪除。一致性讀在 ALTER TABLE 上無效是因?yàn)?GBase 會在事務(wù)內(nèi),重新創(chuàng)建一個新表并從舊表向新表插入記錄。這樣當(dāng)用戶再次執(zhí)行一致性讀時,在新表中將看不到任何行,因?yàn)樵谛卤碇械臄?shù)據(jù)都在第一次一致性讀的快照之外。

關(guān)于MySQL數(shù)據(jù)庫的多版本并發(fā)控制MVCC的介紹就到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. 適合初學(xué)者的MySQL學(xué)習(xí)筆記之管理員常用操作總結(jié)
  2. 適合初學(xué)者的MySQL學(xué)習(xí)筆記之SELECT語句使用詳解
  3. MySQL數(shù)據(jù)庫存儲引擎之MyISAM和InnoDB的區(qū)別對比
  4. 適合初學(xué)者的MySQL學(xué)習(xí)筆記之ORDER BY子句使用詳解
  5. 適合初學(xué)者的MySQL學(xué)習(xí)筆記之MySQL常用命令操作技巧
責(zé)任編輯:趙鵬 來源: 博客園
相關(guān)推薦

2018-08-20 16:00:23

MySQL并發(fā)控制MVCC

2025-05-19 08:05:00

數(shù)據(jù)庫MVCCMySQL

2023-12-06 08:23:16

MVCCmysql

2021-07-19 09:25:19

數(shù)據(jù)庫MySQL技術(shù)

2023-10-16 10:29:51

mysqlMVCC

2024-11-01 05:10:00

2010-06-02 13:03:20

MySQL數(shù)據(jù)庫

2010-05-13 14:07:39

MySQL數(shù)據(jù)庫

2015-08-21 12:59:38

Oracle數(shù)據(jù)庫

2009-11-16 09:05:47

PostgreSQLInnoDB多版本并發(fā)控制

2019-10-12 16:15:13

MySQL數(shù)據(jù)庫多實(shí)例

2021-02-23 09:06:00

MVCC版本并發(fā)

2017-08-21 10:56:55

MySQL并發(fā)控制

2022-02-12 17:48:03

InnoDBMySQL查詢數(shù)據(jù)

2018-06-15 08:23:55

Key-Value數(shù)據(jù)庫MVCC

2022-09-26 10:09:08

MVCC控制并發(fā)

2020-04-21 23:14:08

數(shù)據(jù)并發(fā)控制

2010-08-18 09:00:38

數(shù)據(jù)庫

2010-06-01 14:07:56

2011-08-01 23:08:33

MySQL存儲引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 三级免费av | 在线免费视频一区 | 国产综合网站 | 国产99久久 | 在线观看黄免费 | 国产视频一区二区 | 精品一区在线 | 欧美a级成人淫片免费看 | 久久亚洲国产精品日日av夜夜 | 久久久成人免费视频 | 国产精品视频在线免费观看 | 91视频进入 | 久久一热 | 插插插干干干 | 欧美激情精品久久久久久 | 国产高清视频在线观看 | 国产成人99久久亚洲综合精品 | 日韩高清一区二区 | 久久69精品久久久久久国产越南 | 午夜成人在线视频 | 亚洲国产aⅴ精品一区二区 免费观看av | 亚洲h在线观看 | 91日b| 91素人| 91xxx在线观看 | 国产精品美女久久久久aⅴ国产馆 | 麻豆天堂| 亚洲天堂中文字幕 | 精品视频免费在线 | 极品国产视频 | 毛片com| 国产大片黄色 | 中文字幕一区在线观看视频 | 99国产精品久久久久久久 | 国产一级片av | 成人免费观看男女羞羞视频 | 人人草天天草 | 欧美一区二区视频 | 国产一区二区自拍 | 91av免费看 | 黄色一级毛片 |