• mysql 基础层


    基础层

    上图可以看出mysql架构主要分三个层次:

      第一层 client客户端 管理连接,权限验证

      第二层 server层 词法分析,语法分析,执行计划,索引选择,操作引擎,返回结果

      第三层 存储引擎 存储数据,提供读写接口

    连接器

      ▪ 连接器负责跟客户端建立连接,获取权限、维持和管理连接
        – 用户名密码验证
        – 查询权限信息,分配对应的权限
        – 可以使用show processlist查看现在的连接
        – 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时
      ▪ 连接可以分为两类:
        – 长连接:推荐使用,但是要周期性的断开长连接
        – 短链接

    查询缓存

      ▪ 当执行查询语句的时候,会先去查询缓存中查看结果,之前执行过的sql语句及其结果可能以key-value的形式存储在缓存中,如果能找到则直接返回,如果找不到,就继续执行后续的阶段

      ▪ 但是,不推荐使用查询缓存:
        – 1、查询缓存的失效比较频繁,只要表更新,缓存就会清空
        – 2、缓存对应新更新的数据命中率比较低

    分析器

      ▪ 词法分析:Mysql需要把输入的字符串进行识别每个部分代表什么意思
        – 把字符串 T 识别成 表名 T
        – 把字符串 ID 识别成 列ID
      ▪ 语法分析:
      ▪ 根据语法规则判断这个sql语句是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta”

    优化器

      ▪ 在具体执行SQL语句之前,要先经过优化器的处理
        – 当表中有多个索引的时候,决定用哪个索引
        – 当sql语句需要做多表关联的时候,决定表的连接顺序
        – 等等
      ▪ 不同的执行方式对SQL语句的执行效率影响很大
        – RBO:基于规则的优化
        – CBO:基于成本的优化

    mysql发送一个请求流程:

      1 连接器提供链接服务的,做一些权限认证,比如说用户名和密码匹配

      2 分析器分析sql语句,按照select from where等关键字进行切分,转成词法分析,最终变成AST(抽象语法树)

      3 优化器有两种方式:RBO(基于规则优化)、CBO(基于成本优化)

      4 执行器跟存储引擎进行数据交互

    数据更新的流程:

      1 执行器先从引擎中找到数据,如果在内存中直接返回,如果不在内存中,查询后返回
      2 执行器拿到数据之后会先修改数据,然后调用引擎接口重新吸入数据
      3 引擎将数据更新到内存,同时写数据到redo中,此时处于prepare阶段,并通知执行器执行完成,随时可以操作
      4 执行器生成这个操作的binlog
      5 执行器调用引擎的事务提交接口,引擎把刚刚写完的redo改成commit状态,更新完成
     

    性能监控

    show prodile(会被慢慢淘汰)

    performance schema(性能模块)

    show processlist

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    golang包引用解析
    解决vs code中golang插件依赖安装失败问题
    设计模式之策略模式
    设计模式之模板方法
    设计模式——面向对象设计原则
    设计模式——个人浅谈
    Sublime Text3配置Lua运行环境
    Ntrip协议使用流程及服务器实现架构
    python3解析库lxml
    python3爬虫之Urllib库(二)
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15270036.html
Copyright © 2020-2023  润新知