婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL InnoDB如何保證事務(wù)特性示例詳解

MySQL InnoDB如何保證事務(wù)特性示例詳解

熱門標(biāo)簽:銅陵防封電銷卡 悟空科技電話機(jī)器人 福建外呼系統(tǒng)定制化 真人語音電話機(jī)器人 騰訊地圖標(biāo)注提升 400電話可以免費(fèi)申請嗎 美國反騷擾電話機(jī)器人 怎么在地圖標(biāo)注位置生成圖片 電銷卡外呼系統(tǒng)供應(yīng)商

前言

如果有人問你“數(shù)據(jù)庫事務(wù)有哪些特性”?你可能會很快回答出原子性、一致性、隔離性、持久性即ACID特性。那么你知道InnoDB如何保證這些事務(wù)特性的嗎?如果知道的話這篇文章就可以直接跳過不看啦(#^.^#)

先說結(jié)論:

  • redo log重做日志用來保證事務(wù)的持久性
  • undo log回滾日志保證事務(wù)的原子性
  • undo log+redo log保證事務(wù)的一致性
  • 鎖(共享、排他)用來保證事務(wù)的隔離性

重做日志 redo log

重做日志 redo log 分為兩部分:一部分是內(nèi)存中的重做日志緩沖(redo log buffer),是易丟失的;二部分是重做日志文件(redo log file),是持久的。InnoDB通過Force Log at Commit機(jī)制來實(shí)現(xiàn)持久性,當(dāng)commit時(shí),必須先將事務(wù)的所有日志寫到重做日志文件進(jìn)行持久化,待commit操作完成才算完成。

InnoDB在下面情況下會將重做日志緩沖的內(nèi)容寫入重做日志文件:

  • master thread 每一秒將重做日志緩沖刷新到重做日志文件;
  • 每個(gè)事務(wù)提交時(shí)
  • 當(dāng)重做日志緩沖池剩余空間小于1/2時(shí)

為了確保每次日志都寫入重做日志文件,在每次將日志緩沖寫入重做日志文件后,InnoDB存儲引擎都需要調(diào)用一次fsync(刷盤)操作。但這也不是絕對的。用戶可以通過修改innodb_flush_log_at_trx_commoit參數(shù)來控制重做日志刷新到磁盤的策略,這個(gè)可以作為大量事務(wù)提交時(shí)的優(yōu)化點(diǎn)。

  • 1參數(shù)默認(rèn)值,表示事務(wù)提交時(shí)必須調(diào)用一次fsync操作。
  • 0表示事務(wù)提交時(shí),重做日志緩存并不立即寫入重做日志文件,而是隨著Master Thread的間隔進(jìn)行fsync操作。
  • 2表示事務(wù)提交時(shí)將重做日志寫入重做日志文件,但僅寫入文件系統(tǒng)的緩存中,不進(jìn)行fsync操作。
    fsync的效率取決于磁盤的性能,因此磁盤的性能決定了事務(wù)提交的性能,也就是數(shù)據(jù)庫的性能。所以如果有人問你如何優(yōu)化Mysql數(shù)據(jù)庫的時(shí)候別忘了有硬件這一條,讓他們提升硬盤配置,換SSD固態(tài)硬盤
    重做日志都是以512字節(jié)進(jìn)行存儲的,稱之為重做日志塊,與磁盤扇區(qū)大小一致,這意味著重做日志的寫入可以保證原子性,不需要doublewrite技術(shù)。它有以下3個(gè)特性:
  • 重做日志是在InnoDB層產(chǎn)生的
  • 重做日志是物理格式日志,記錄的是對每個(gè)頁的修改
  • 重做日志在事務(wù)進(jìn)行中不斷被寫入,而且是順序?qū)懭?br />

回滾日志 undo log

為了滿足事務(wù)的原子性,在操作任何數(shù)據(jù)之前,首先將數(shù)據(jù)備份到一個(gè)地方(這個(gè)存儲數(shù)據(jù)備份的地方稱為Undo Log),然后進(jìn)行數(shù)據(jù)的修改。如果出現(xiàn)了錯(cuò)誤或者用戶執(zhí)行了 ROLLBACK語句,系統(tǒng)可以利用Undo Log中的備份將數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。

undo log實(shí)現(xiàn)多版本并發(fā)控制(MVCC)來輔助保證事務(wù)的隔離性。

回滾日志不同于重做日志,它是邏輯日志,對數(shù)據(jù)庫的修改都邏輯的取消了。當(dāng)事務(wù)回滾時(shí),它實(shí)際上做的是與先前相反的工作。對于每個(gè)INSERT,InnoDB存儲引擎都會完成一個(gè)DELETE;對于每個(gè)UPDATE,InnoDB存儲引擎都會執(zhí)行一個(gè)相反的UPDATE。

事務(wù)提交后并不能馬上刪除undo log,這是因?yàn)榭赡苓€有其他事務(wù)需要通過undo log 來得到行記錄之前的版本。故事務(wù)提交時(shí)將undo log 放入一個(gè)鏈表中,是否可以刪除undo log 根據(jù)操作不同分以下2種情況:

  • Insert undo log: insert操作的記錄,只對事務(wù)本身可見,對其他事務(wù)不可見(這是事務(wù)隔離性的要求),故該undo log可以在事務(wù)提交后直接刪除。不需要進(jìn)行 purge操作。
  • update undo log:記錄的是對 delete和 update操作產(chǎn)生的 undo log。該undo log可能需要提供MVCC機(jī)制,因此不能在事務(wù)提交時(shí)就進(jìn)行刪除。提交時(shí)放入undo log鏈表,等待 purge線程進(jìn)行最后的刪除。


事務(wù)的隔離性的實(shí)現(xiàn)原理就是鎖,因而隔離性也可以稱為并發(fā)控制、鎖等。事務(wù)的隔離性要求每個(gè)讀寫事務(wù)的對象對其他事務(wù)的操作對象能互相分離。再者,比如操作緩沖池中的LRU列表,刪除,添加、移動(dòng)LRU列表中的元素,為了保證一致性那么就要鎖的介入。

鎖的類型

InnoDB主要有2種鎖:行級鎖,意向鎖

行級鎖:

  • 共享鎖(讀鎖 S),允許事務(wù)讀一行數(shù)據(jù)。事務(wù)拿到某一行記錄的共享S鎖,才可以讀取這一行,并阻止別的事務(wù)對其添加X鎖。共享鎖的目的是提高讀讀并發(fā)。
  • 排它鎖(寫鎖 X),允許事務(wù)刪除一行數(shù)據(jù)或者更新一行數(shù)據(jù)。事務(wù)拿到某一行記錄的排它X鎖,才可以修改或者刪除這一行。排他鎖的目的是為了保證數(shù)據(jù)的一致性。

行級鎖中,除了S和S兼容,其他都不兼容。

意向鎖:

  • 意向共享鎖(讀鎖 IS ),事務(wù)想要獲取一張表的幾行數(shù)據(jù)的共享鎖,事務(wù)在給一個(gè)數(shù)據(jù)行加共享鎖前必須先取得該表的IS鎖。
  • 意向排他鎖(寫鎖 IX),事務(wù)想要獲取一張表中幾行數(shù)據(jù)的排它鎖,事務(wù)在給一個(gè)數(shù)據(jù)行加排他鎖前必須先取得該表的IX鎖。

解釋一下意向鎖

The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.

意向鎖的主要用途是為了表達(dá)某個(gè)事務(wù)正在鎖定一行或者將要鎖定一行數(shù)據(jù)。e.g:事務(wù)A要對一行記錄r進(jìn)行上X鎖,那么InnoDB會先申請表的IX鎖,再鎖定記錄r的X鎖。在事務(wù)A完成之前,事務(wù)B想要來個(gè)全表操作,此時(shí)直接在表級別的IX就告訴事務(wù)B需要等待而不需要在表上判斷每一行是否有鎖。意向排它鎖存在的價(jià)值在于節(jié)約InnoDB對于鎖的定位和處理性能。另外注意了,除了全表掃描以外意向鎖都不會阻塞。

鎖的算法

InnoDB有三種行鎖的算法:

  • Record Lock:單個(gè)行記錄上的鎖
  • Gap Lock:間隙鎖,鎖定一個(gè)范圍,而非記錄本身
  • Next-Key Lock:結(jié)合Gap Lock和Record Lock,鎖定一個(gè)范圍,并且鎖定記錄本身。主要解決的問題是REPEATABLE READ隔離級別下的幻讀。可以參考文章了解事務(wù)隔離級別的相關(guān)知識點(diǎn)。

這里主要講一下Next-Key Lock,利用Next-key Lock鎖定的不是單個(gè)值而是一個(gè)范圍,他的目的就是為了阻止多個(gè)事務(wù)將記錄插入到同一范圍內(nèi)從而導(dǎo)致幻讀。

注意了,如果走唯一索引,那么Next-Key Lock會降級為Record Lock,即僅鎖住索引本身,而不是范圍。也就是說Next-Key Lock前置條件為事務(wù)隔離級別為RR且查詢的索引走的非唯一索引、主鍵索引。

下面我們用個(gè)例子詳細(xì)說一下。

首先建立一張表:

CREATE TABLE T (id int ,f_id int,PRIMARY KEY (id), KEY(f_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into T SELECT 1,1;
insert into T SELECT 3,1;
insert into T SELECT 5,3;
insert into T SELECT 7,6;
insert into T SELECT 10,8;

事務(wù)A執(zhí)行如下語句:

SELECT * FROM T WHERE f_id = 3 FOR UPDATE

這時(shí)SQL語句走非唯一索引,因此使用Next-Key Locking加鎖,并且有2個(gè)索引,其需要分別進(jìn)行鎖定。

對于聚集索引,其僅對id等于5的索引加上Record Lock。而對于輔助索引,其加上Next-Key Lock,鎖定了范圍(1,3),特別需要注意的是,InnoDB存儲引擎還會對輔助索引下一個(gè)鍵值加上Gap Lock,即范圍(3.6)的鎖。

所以如果在新session中執(zhí)行如下語句都會報(bào)錯(cuò)[Err] 1205 - Lock wait timeout exceeded; try restarting transaction

select * from T where id = 5 lock in share MODE -- 不能執(zhí)行,因?yàn)槭聞?wù)A已經(jīng)給id=5的值加上了X鎖,執(zhí)行會被阻塞
INSERT INTO T SELECT 4,2 -- 不能執(zhí)行,輔助索引的值為2,在(1,3)的范圍內(nèi),執(zhí)行阻塞
INSERT INTO T SELECT 6,5 -- 不能執(zhí)行,gap鎖會鎖住(3,6)的范圍,執(zhí)行阻塞

此時(shí)想象一下,事務(wù)A鎖定了f_id =5 的記錄, 正常會有個(gè)gap lock,鎖住(5,6),那么如果沒有(5,6)的gap鎖,那么用戶可以插入索引 f_id 為5的記錄,這樣事務(wù)A再次查詢就會返回一個(gè)不同的記錄,也就導(dǎo)致了幻讀的產(chǎn)生。

同理,如果我們事務(wù)A執(zhí)行的是select * from T where f_id = 10 FOR UPDATE,在表里查不到數(shù)據(jù),但是基于Next-Key Lock會鎖住(8,+∞),我們執(zhí)行INSERT INTO T SELECT 6,11是無法插入成功的,這就從根本上解決了幻讀問題。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Mysql InnoDB和MyISAM區(qū)別原理解析
  • 獲取 MySQL innodb B+tree 的高度的方法
  • MySQL MyISAM 與InnoDB 的區(qū)別
  • 簡述MySQL InnoDB存儲引擎
  • MySQL Innodb 存儲結(jié)構(gòu) 和 存儲Null值 用法詳解
  • MySQL InnoDB row_id邊界溢出驗(yàn)證的方法步驟
  • MySQL啟動(dòng)報(bào)錯(cuò)問題InnoDB:Unable to lock/ibdata1 error
  • MySQL InnoDB中的鎖機(jī)制深入講解
  • 詳解MySQL(InnoDB)是如何處理死鎖的
  • MySQL學(xué)習(xí)(七):Innodb存儲引擎索引的實(shí)現(xiàn)原理詳解
  • MySQL slow_log表無法修改成innodb引擎詳解
  • mysql innodb的重要組件匯總

標(biāo)簽:云浮 武威 烏海 臨汾 聊城 白銀 湖南 湖北

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL InnoDB如何保證事務(wù)特性示例詳解》,本文關(guān)鍵詞  MySQL,InnoDB,如何,保證,事務(wù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL InnoDB如何保證事務(wù)特性示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL InnoDB如何保證事務(wù)特性示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    97国产一区二区| 欧美日韩国产小视频| 欧洲中文字幕精品| 国产精品午夜久久| 色婷婷综合久色| 亚洲综合在线视频| 欧美日韩免费电影| 精品在线免费视频| 国产精品久久久久四虎| 91网站视频在线观看| 亚洲第一综合色| 久久人人爽爽爽人久久久| 成人18精品视频| 亚洲国产日韩综合久久精品| 欧美精品在线一区二区三区| 捆绑紧缚一区二区三区视频| 久久久久88色偷偷免费| 一本色道久久综合亚洲aⅴ蜜桃 | 色婷婷久久一区二区三区麻豆| 亚洲欧洲日产国产综合网| 在线亚洲高清视频| 韩国精品久久久| 亚洲精品自拍动漫在线| 欧美不卡视频一区| 91小宝寻花一区二区三区| 久久99精品视频| 国产精品国产a| 4438x成人网最大色成网站| 丁香激情综合五月| 日韩国产高清在线| 亚洲精品精品亚洲| 国产清纯美女被跳蛋高潮一区二区久久w| av激情综合网| 精品在线免费视频| 天天综合日日夜夜精品| 国产亚洲精品7777| 欧美一区二区三区影视| 91黄色在线观看| 国产·精品毛片| 美女视频免费一区| 性做久久久久久免费观看欧美| 国产精品精品国产色婷婷| 日韩久久久精品| 欧美日韩久久不卡| 91啪亚洲精品| 成人精品国产福利| 国产精品一区二区视频| 日本中文字幕一区二区有限公司| 亚洲精品ww久久久久久p站 | 亚洲最色的网站| 国产精品久久久久久亚洲伦| 欧美大片在线观看| 精品区一区二区| 日韩精品影音先锋| 欧美一级欧美三级在线观看| 欧美日韩高清在线| 欧美日韩你懂得| 欧美日韩国产在线播放网站| 欧美色图一区二区三区| 色综合久久中文字幕| 91色porny在线视频| www.99精品| 色综合色狠狠天天综合色| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲制服丝袜一区| 亚洲精品国产无天堂网2021| 亚洲欧洲日韩在线| 一区二区三区欧美在线观看| 亚洲小说欧美激情另类| 午夜欧美大尺度福利影院在线看| 性久久久久久久久久久久 | 午夜免费久久看| 日产精品久久久久久久性色| 青草国产精品久久久久久| 麻豆精品在线视频| 国产美女一区二区| 成人av资源站| 欧美午夜影院一区| 日韩欧美激情在线| 欧美国产激情二区三区| 亚洲美女视频在线| 日韩国产在线观看| 99久久免费视频.com| 波多野结衣精品在线| 色婷婷国产精品| 91女神在线视频| 国产v综合v亚洲欧| 成人黄页在线观看| 国产精品乡下勾搭老头1| 国内精品伊人久久久久av一坑| 国产一区二区三区久久久| 97aⅴ精品视频一二三区| 在线电影国产精品| 国产精品午夜免费| 日本不卡不码高清免费观看| 欧美一级理论性理论a| 欧美性感一类影片在线播放| 91视频一区二区| 91精品国产乱| ...中文天堂在线一区| 日韩在线卡一卡二| www.日韩精品| 日韩欧美激情四射| 一区二区成人在线观看| 免费的成人av| 91免费国产在线观看| 久久综合av免费| 亚洲国产成人精品视频| 国产成人精品一区二| 欧美一区国产二区| 亚洲视频在线一区| 国产精品456| 日韩精品中文字幕在线一区| 亚洲一二三区不卡| 99国产精品久久| 国产亚洲精品aa| 国产一区二区福利| 91精品国产综合久久香蕉的特点| 亚洲人成电影网站色mp4| 成人性视频免费网站| 2020国产精品| 美国一区二区三区在线播放| 欧美性生活久久| 一区二区在线观看视频| 国产成人h网站| 国产欧美精品一区二区色综合| 久久成人羞羞网站| 欧美顶级少妇做爰| 天天做天天摸天天爽国产一区| 91国产丝袜在线播放| 最新国产成人在线观看| 99视频国产精品| 亚洲色图在线播放| 91成人国产精品| 亚洲午夜羞羞片| 欧美私模裸体表演在线观看| 国产精品久久久久一区二区三区| 国产精品一区二区三区网站| 亚洲精品一区二区三区在线观看| 久久99精品国产麻豆婷婷洗澡| 日韩一区二区三区电影在线观看 | 亚洲欧美日韩国产手机在线| 成人精品gif动图一区| 国产精品久久久久毛片软件| aaa欧美色吧激情视频| 伊人开心综合网| 欧美日韩精品是欧美日韩精品| 日韩国产在线观看| 精品精品国产高清一毛片一天堂| 激情综合一区二区三区| 久久久精品一品道一区| av网站免费线看精品| 午夜精品久久久久久久久久| 欧美日韩国产首页在线观看| 麻豆91在线观看| 亚洲国产激情av| 欧美日韩精品高清| 久久精品999| 国产精品国产三级国产| 色视频欧美一区二区三区| 天天操天天色综合| 2014亚洲片线观看视频免费| 97久久超碰国产精品| 天堂成人免费av电影一区| 久久亚洲一级片| 91久久香蕉国产日韩欧美9色| 日韩av在线播放中文字幕| 久久午夜电影网| 91片黄在线观看| 麻豆国产精品一区二区三区| 国产精品麻豆欧美日韩ww| 欧美三级一区二区| 国产一区在线看| 亚洲二区视频在线| 久久久精品中文字幕麻豆发布| 日本高清不卡aⅴ免费网站| 久久国产福利国产秒拍| 亚洲欧美日韩国产成人精品影院| 日韩精品中文字幕一区二区三区 | 色婷婷综合久久久中文一区二区| 亚洲一区二区三区影院| 久久亚洲免费视频| 4438x成人网最大色成网站| 99精品久久久久久| 韩国精品久久久| 午夜精品久久久| 亚洲少妇30p| 国产欧美日本一区二区三区| 日韩免费一区二区三区在线播放| 92精品国产成人观看免费| 韩国成人福利片在线播放| 亚洲一区二区三区小说| 日本一区二区三区视频视频| 欧美一区二区在线看| 色噜噜夜夜夜综合网| 成人短视频下载| 国产精品资源在线看| 久久精品国产久精国产爱| 奇米影视一区二区三区| 亚洲午夜视频在线观看|