MySQL基础架构

架构

// TODO 架构图

大体来说,MySQL分为 Server层 和 存储引擎层 两部分

Server层包括:连接器、查询缓存、分析器、优化器、执行器。涵盖MySQL大多数核心服务功能,以及所有的内置函数(时间、日期、数学、加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎层:负责数据的存储和读取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等引擎。


Server层

连接器

负责跟客户端建立连接、获取权限、维持和管理连接

查询缓存

MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果会以 key-value 对的形式,直接缓存在内存中。key是查询语句,value是查询结果。
如果查询能在缓存中找到key,则直接返回value给客户端。如果找不到,就会继续后面的执行阶段,执行完成后,执行结果会被存入查询缓存中。

大多数情况下不要用查询缓存,因为往往弊大于利。
查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。MySQL8.0版本,直接将查询缓存功能整块去掉了。

分析器

如果没有命中查询缓存,就要开始真正执行语句了。首先MySQL需要知道要做什么,所以需要对SQL语句进行解析。
先做词法分析,识别语句中的字符串分别是什么、代表什么,识别出关键词,表名、列等。
再做语法分析,对词法分析的结果,根据语法规则,判断SQL语句是否满足MySQL语法。

优化器

表里有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联的时候,决定各个表的连接顺序。

执行器

MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

开始执行的时候,要先判断一下你对这个表T有没有执行查询的权限。
如果没有,就会返回没有权限的错误(如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用precheck验证权限)

权限验证不仅会在执行器这部分会做,在分析器之后,也就是知道了该语句要干什么之后,也会先做一次权限验证,叫做precheck,而precheck是无法对运行时涉及到的表进行权限验证的,比如使用了触发器的情况。因此在执行器这里也要做一次执行时的权限验证。

如果有权限,就打开表继续执行。执行器会根据表的引擎定义,去使用这个引擎提供的接口。

相关问题

  1. 问:表T,没有k字段,执行下面语句时会报字段不存在的错误,这个错误是在哪个阶段报出来的呢?
select * from T where k = 1;

答:分析器。

《高性能mysql》里提到解析器和预处理器。
解析器处理语法和解析查询,生成一棵对应的解析树。
预处理器进一步检查解析树的合法,比如数据表、数据列是否存在,别名是否有歧义等。如果通过则生成新的解析树,提交给优化器。

词法解析、语法解析、语义解析(在语义解析这步做)

  1. 问:对于表的操作权限验证在哪里进行?
    答:查询缓存、优化器之前的precheck、执行器

连接器从权限表里查询用户权限,并保存在变量里以供查询缓存、分析器、执行器在检查权限的时候使用

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

推荐阅读更多精彩内容