zoukankan      html  css  js  c++  java
  • MySQL架构

    MySQL架构

    一、MySQL架构

    • 连接器——管理连接、权限认证
    • 分析器——词法分析、语法分析(AST)抽象语法树
    • 优化器——执行计划、索引选择
    • 执行器——操作引擎、返回结果
    • 存储引擎——存储数据,提供读写接口

    8.0版本之后,舍弃了查询缓存功能

    二、连接器

    连接器负责跟客户端建立连接,以获得权限、维持和管理连接

    • 用户名密码验证
    • 查询权限信息、分配对应权限
    • 可以使用show processlist查看现在连接
    • 如果太长时间没有动静,就会自动断开,通过wait_timeout控制,默认8小时

    连接分类:

    • 长连接:建议
    • 短连接

    三、查询缓存

    查询语句的时候,先去查询缓存查看结果,8.0后没有这个组件

    不推荐理由:

    • 查询缓存失效比较频繁,只要表更新,缓存就会清空
    • 缓存对应更新数据命中率比较低

    四、分析器

    • 词法分析:MySQL需要把输入字符串进行识别
    • 语法分析:根据语法规则判断SQL是否满足mysql的语法,如果不符合就会报错“You have an error in your SQL synta”

    五、优化器

    • 在具体执行SQL语句之前要经过优化器进行处理
      • 当表中有多个索引,决定使用哪个索引
      • 当需要多表关联,决定表的连接顺序...等
    • 不同的执行方式对SQL语句执行效率影响很大
      • CBO(Cost-Based Optimization):基于成本的优化
      • RBO(Rule-Based Optimization):基于规则的优化
    日志系统
    5.1.Redo log——innodb存储引擎的日志文件

    发生数据修改的时候,innodb会先卸载redo log中,并更新内存,此时更新完成,redo日志是固定大小的,是循环写的过程

    事务中就是通过redo log进行书写的

    5.2.Undo log——操作数据,先将数据备份

    进行修改数据,先进行备份,之后可以再次进行

    5.3.binlog——记录是逻辑日志

    可备份逻辑日志

    binlog是server层的日志,主要做mysql功能层面的事
    与redo日志区别:
    - 1.redo是innodb独有的, binlog是所有引擎都可以用的
    - 2.redo是物理日志,记录在某页做了什么修改,binlog是逻辑日志,记录是这个语句的原始逻辑
    - 3.redo是循环写的,空间是用完,binlog是可以追加的,不会覆盖之前的日志信息
    
  • 相关阅读:
    【文字检测算法整理】
    【LDA】周志华
    【PCA】周志华
    【SVM】周志华
    4.1、顺序栈的实现(java实现)
    3.1、双向循环链表(java实现)
    5、链表队列(java实现)
    4、链栈的实现(java代码)
    3、循环链表(java实现)
    CommonsMultipartFile 转为 File 类型
  • 原文地址:https://www.cnblogs.com/littlepage/p/11878149.html
Copyright © 2011-2022 走看看