数据库系列xx-一条更新SQL执行流程

这篇笔记主要目的是梳理清楚,一条数据的落地,中间会在哪些组件中有写入

已知的有redo log, undo log, 索引,数据文件,写入的顺序是怎么样,完成到哪个步骤,就可认为事务算是结束了。数据恢复,当数据库意外down机后,重启后怎么恢复数据,有哪些场景会导致数据丢失(恢复不了)

主要是对这篇文章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 层

  • 构建语法树
  • 检查权限
  • 获取MDL(防止有DDL对更改表)并打开表
  • 获取索引统计?
  • 生成执行计划

Step 2a:通过引擎接口读取数据

  • 根据where条件匹配所有rows(根据索引或者遍历主键索引)
  • <font color="#0000CD">在第一次读的时候,InnoDB才会开启事务</font>
    • 分配一个新的DB_TRX_ID(InnoDB 全局递增)
    • 因为这是一个互斥操作,需要获取锁,所以不需要read view。

Step 2b: 过滤行

  • 如果WHERE条件只能通过范围扫描或全表扫描,必须要过滤掉不匹配的行

    • 如果能利用索引下推,InnoDB层直接过滤掉不匹配的行

    • 否则,逐行返回,MySQL服务层来过滤

      索引下推 Index Condition PushDown -ICP

      是利用索引优化查询的技术,查询数据的流程,InnoDB层在主键索引中(如果执行机会能走二级索引,会先在二级索引中过滤掉不匹配的主键)找到整行数据,返回给MySQL层,一直循环,直至所有符合条件的行被返回。这时候看执行计划中,显示的是using where.如果where 条件中有索引字段,但是没被计划选择(比如 where a like '%xxx'),则在InnodDB层,现在索引中比对该字段,如果不符合条件,不会再去获取整行,当然也不会返回给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: 清理

  • COMMIT执行后,释放所有的行锁
  • 唤醒其他等待这些锁的事务
  • 释放MDL,此时可以执行DDL了

这一套又是好复杂的东西 骑马得看好几天。。。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,427评论 1 8
  • 这篇文章主要涉及到MySQL的知识点: 索引(包括分类及优化方式,失效条件,底层结构) sql语法(join,un...
    一根薯条阅读 2,707评论 0 8
  • 数据库的基本是概念名词解释: 数据库名词解释 元组:可以理解为表的每一行就是一个元组 候选码:若关系中的某一属性组...
    杰伦哎呦哎呦阅读 1,109评论 0 6
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 2,914评论 0 8
  • 不是所有的事情都是眼睛看到的那样的 不是所有的事情都能拿来说 很多的事情 只是放在心里 不想让别人知道 也不指望 ...
    聪明的奥特曼阅读 144评论 0 0