數(shù)據(jù)庫系列xx-一條更新SQL執(zhí)行流程

這篇筆記主要目的是梳理清楚嗤朴,一條數(shù)據(jù)的落地须肆,中間會在哪些組件中有寫入

已知的有redo log, undo log, 索引,數(shù)據(jù)文件合敦,寫入的順序是怎么樣初橘,完成到哪個步驟,就可認(rèn)為事務(wù)算是結(jié)束了充岛。數(shù)據(jù)恢復(fù)保檐,當(dāng)數(shù)據(jù)庫意外down機后,重啟后怎么恢復(fù)數(shù)據(jù)崔梗,有哪些場景會導(dǎo)致數(shù)據(jù)丟失(恢復(fù)不了)

主要是對這篇文章https://www.slideshare.net/MariaDB/m18-deep-dive-innodb-transactions-and-write-paths的翻譯整理

A Detailed Look at a Single-ROW AUTOCOMMIT Trasaction:

UPDATE talk SET attendees =25 WHERE conference='M|18' AND name = 'Deep Dive';

Step 1:SQL 層

  • 構(gòu)建語法樹
  • 檢查權(quán)限
  • 獲取MDL(防止有DDL對更改表)并打開表
  • 獲取索引統(tǒng)計夜只?
  • 生成執(zhí)行計劃

Step 2a:通過引擎接口讀取數(shù)據(jù)

  • 根據(jù)where條件匹配所有rows(根據(jù)索引或者遍歷主鍵索引)
  • <font color="#0000CD">在第一次讀的時候,InnoDB才會開啟事務(wù)</font>
    • 分配一個新的DB_TRX_ID(InnoDB 全局遞增)
    • 因為這是一個互斥操作蒜魄,需要獲取鎖扔亥,所以不需要read view。

Step 2b: 過濾行

  • 如果WHERE條件只能通過范圍掃描或全表掃描权悟,必須要過濾掉不匹配的行

    • 如果能利用索引下推砸王,InnoDB層直接過濾掉不匹配的行

    • 否則,逐行返回峦阁,MySQL服務(wù)層來過濾

      索引下推 Index Condition PushDown -ICP

      是利用索引優(yōu)化查詢的技術(shù)谦铃,查詢數(shù)據(jù)的流程,InnoDB層在主鍵索引中(如果執(zhí)行機會能走二級索引榔昔,會先在二級索引中過濾掉不匹配的主鍵)找到整行數(shù)據(jù)驹闰,返回給MySQL層瘪菌,一直循環(huán),直至所有符合條件的行被返回嘹朗。這時候看執(zhí)行計劃中师妙,顯示的是using where.如果where 條件中有索引字段,但是沒被計劃選擇(比如 where a like '%xxx')屹培,則在InnodDB層默穴,現(xiàn)在索引中比對該字段,如果不符合條件褪秀,不會再去獲取整行蓄诽,當(dāng)然也不會返回給MySQL 層了。

      詳見https://www.jishuwen.com/d/2S43

  • 每返回一行媒吗,就開啟一個mini-transaction

    這里說的每返回的一行仑氛,表示InnoDB返回的,即便是這行在MySQL層會過濾掉闸英,也會開啟一個mini-transaction嗎锯岖?

Step 2c: 獲取所有匹配行的鎖

  • InnoDB will write-lock each index leaf read

    • Note: InnoDB has no “table row locks”, but “record locks” in each index separately.

    • If using index condition pushdown, non-matching records are not locked.

      看不懂。甫何。出吹。。沛豌。鎖的到底是什么 索引趋箩??加派?因為row只能通過主鍵索引來獲取

  • 所有可能被修改的記錄被鎖捉腥贰?

Step 3a: 記錄Undo log

Step 3b: 更新所有匹配的行

Step 4a: 提交

可能的Step 4a: 回滾

Step 4b: 清理

  • 當(dāng)COMMIT執(zhí)行后芍锦,釋放所有的行鎖
  • 喚醒其他等待這些鎖的事務(wù)
  • 釋放MDL竹勉,此時可以執(zhí)行DDL了

這一套又是好復(fù)雜的東西 騎馬得看好幾天。娄琉。次乓。。孽水。票腰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市女气,隨后出現(xiàn)的幾起案子杏慰,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缘滥,死亡現(xiàn)場離奇詭異轰胁,居然都是意外死亡,警方通過查閱死者的電腦和手機朝扼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門赃阀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人擎颖,你說我怎么就攤上這事榛斯。” “怎么了肠仪?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵肖抱,是天一觀的道長备典。 經(jīng)常有香客問我异旧,道長,這世上最難降的妖魔是什么提佣? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任吮蛹,我火速辦了婚禮,結(jié)果婚禮上拌屏,老公的妹妹穿的比我還像新娘潮针。我一直安慰自己,他們只是感情好倚喂,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布每篷。 她就那樣靜靜地躺著,像睡著了一般端圈。 火紅的嫁衣襯著肌膚如雪焦读。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天舱权,我揣著相機與錄音矗晃,去河邊找鬼。 笑死宴倍,一個胖子當(dāng)著我的面吹牛张症,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸵贬,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼俗他,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阔逼?” 一聲冷哼從身側(cè)響起兆衅,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涯保,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉濒,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年夕春,在試婚紗的時候發(fā)現(xiàn)自己被綠了未荒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡及志,死狀恐怖片排,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情速侈,我是刑警寧澤率寡,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站倚搬,受9級特大地震影響冶共,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜每界,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一捅僵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眨层,春花似錦庙楚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叁征,卻和暖如春纳账,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背航揉。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工塞祈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帅涂。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓议薪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媳友。 傳聞我的和親對象是個殘疾皇子斯议,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、MySQL優(yōu)化 MySQL優(yōu)化從哪些方面入手: (1)存儲層(數(shù)據(jù)) 構(gòu)建良好的數(shù)據(jù)結(jié)構(gòu)醇锚『哂可以大大的提升我們S...
    寵辱不驚丶歲月靜好閱讀 2,418評論 1 8
  • 這篇文章主要涉及到MySQL的知識點: 索引(包括分類及優(yōu)化方式坯临,失效條件,底層結(jié)構(gòu)) sql語法(join恋昼,un...
    一根薯條閱讀 2,699評論 0 8
  • 數(shù)據(jù)庫的基本是概念名詞解釋: 數(shù)據(jù)庫名詞解釋 元組:可以理解為表的每一行就是一個元組 候選碼:若關(guān)系中的某一屬性組...
    杰倫哎呦哎呦閱讀 1,103評論 0 6
  • 索引 數(shù)據(jù)庫中的查詢操作非常普遍液肌,索引就是提升查找速度的一種手段 索引的類型 從數(shù)據(jù)結(jié)構(gòu)角度分 1.B+索引:傳統(tǒng)...
    一凡呀閱讀 2,882評論 0 8
  • 不是所有的事情都是眼睛看到的那樣的 不是所有的事情都能拿來說 很多的事情 只是放在心里 不想讓別人知道 也不指望 ...
    聰明的奧特曼閱讀 143評論 0 0