MySQL基础架构

作者: 传达室马大爷 | 来源:发表于2021-03-21 23:46 被阅读0次

    MySQL基础架构示意图

    • 客户端
    • 服务层
      • 连接器:管理连接,权限验证等
      • 查询缓存:命中缓存则直接返回结果
      • 分析器:语法分析、词法分析
      • 优化器:执行计划生成,索引选择
      • 执行器:操作引擎,返回结果
    • 存储引擎层:存储数据,提供读写接口
      • InnoDB(默认存储引擎)
      • MyISAM
      • Memory
    image.png

    有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。

    一条查询SQL执行流程

    第一步:与【连接器】创建连接

    连接器校验客户端的用户名和密码以及所拥有的权限

    第二步:查询缓存

    之前查询的数据以key-value的形式存在缓存中,sql语句为key,查询结果集为value,如果有值校验权限后直接返回缓存结果,如果查不到缓存,则继续后面的执行阶段
    大多数情况下不建议使用缓存,因为缓存失败特别频繁,表中只要有更新操作,则与这个表相关的缓存都会被清除,如果更新频繁的话缓存的命中率很低,对于那种更新不频繁,比如配置表可以使用缓存

    第三步:分析器分析SQL语句

    首先进行词法分析,识别出关键字、字段、表名、查询条件等
    其次再进行语法分析,构建语法树,校验输入的SQL是否满足MYSQL语法

    第四步:优化器对SQL进行优化

    优化器在表有多条索引时,决定使用哪条索引,或者多表联合索引时决定各个表的索引执行顺序

    第五步:执行器选择调用引擎查询结果

    首先验证对表的执行权限,如果没有则直接返回权限错误
    调用执行引擎接口查询数据并返回

    一条更新语句执行流程

    • 与连接器创建连接,验证登录和权限
    • 清除表对应的缓存
    • 分析器分析SQL语句
    • 优化器对SQL进行优化
    • 执行器选择调用引擎
    • 写入redo-log和bin-log日志

    相关文章

      网友评论

        本文标题:MySQL基础架构

        本文链接:https://www.haomeiwen.com/subject/jdyacltx.html