zoukankan      html  css  js  c++  java
  • MySQL基础架构-架构详解

    mysql基础架构图

    微信图片_20200629161843.jpg

    架构详解

    连接器部分
    整体功能
    • 建立连接

    • 维持管理连接

    • 校验用户名密码,查询权限

    最佳实践
    1. 不要在命令行客户端中明文输入密码
      • -p 中不要使用明文密码
    2. 修改权限,需要重新建立连接后才会生效
      • mysql在建立连接时会读取一次权限,以后都使用这个权限
    3. 查看所有连接命令:show processlist
      • 长连接默认超时时间为8小时,超时后服务端会断开连接
      • 使用这个超时参数:wait_timeout来设置
      • 服务端断开连接后,客户端再次执行请求,会报Lost Connection to mysql server during query。
    4. mysql异常重启(OOM被杀掉)原因之一
      • 客户端建立长连接后,会占用一些内存,直到连接关闭后才释放。如果建立大量连接,可能导致内存飙升
      • 解决方法:
        • 定期断开连接
        • mysql5.7以后版本,支持 mysql_reset_connection命令,可以初始化连接内存,和第一种方法比,不需要重连和校验权限。

    查询缓存部分
    最佳实践
    1. mysql8.0版本以后已经去掉这个功能了
    2. mysql8.0以前的版本
      • 建议关闭查询缓存功能,把query_cache_type设置为DEMAND
      • 在需要使用缓存的表中,select语句中加入 SQL_CACHE即可
        • select SQL_CACHE * from 表名
    3. 查询结果返回时,会校验权限

    分析器部分

    分析器部分主要做两件事:

    1. 词法分析:解析关键词,校验表名是否存在,列是否存在等等
    2. 语法分析:判断是否符合mysql的语法规则
    最佳实践
    1. 出现语法错误时,会返回you have an error in your SQL syntax错误,这个错误提示第一个出现错误的地方,所以检查紧跟use near后面的语句即可

    优化器部分

    优化器做两类事:

    1. 选择索引
    2. 确定表关联的顺序

    目的都是优化执行性能


    执行器部分

    执行器先校验是否有权限
    如果有权限,按照表定义中的引擎,使用这个引擎提供的接口

    如果没有索引:

    1. 调用引擎提供的取表第一行,判断是否符合条件,符合条件加入结果集
    2. 调用引擎提供的下一行接口,继续判断;直到最后一行
    3. 将结果集返回给客户端

    如果有索引:

    1. 调用满足条件的第一行接口
    2. 循环取满足条件的下一行接口
    最佳实践
    1. 慢查询日志中有一个rows_examined字段,这个字段是在执行器每调用一次引擎接口的时候就加一,但是每调用一次接口,实际在引擎中扫描的行数是不确定的,所以实际扫描行数和这个字段并不完全一致
  • 相关阅读:
    聊聊LiteOS事件模块的结构体、初始化及常用操作
    有了这个数据强一致“利器”,DBA们轻松修复数据对加班“say no”
    开源一周岁,MindSpore新特性巨量来袭
    90后就敢当扫地僧!不服?4月24号来闯龙门阵!
    你的数仓函数结果不稳定,可能是属性指定错了
    云小课 | 不了解EIP带宽计费规则?看这里!
    腾讯 angel 3.0:高效处理模型
    深度树匹配模型(TDM)
    X-Deep Learning功能模块
    XLearning
  • 原文地址:https://www.cnblogs.com/ging/p/13467771.html
Copyright © 2011-2022 走看看