加入收藏 | 设为首页 | 会员中心 | 我要投稿 荆门站长网 (https://www.0724zz.cn/)- 图像技术、建站、AI硬件、智能营销、数据搜素!
当前位置: 首页 > 云计算 > 正文

增删改查这么多年,最后栽在MySQL的架构设计上

发布时间:2022-08-02 11:04:53 所属栏目:云计算 来源:互联网
导读:目前大部分后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。 对MySQL的基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查等。 所以很多后端开发人员眼中的MySQL如下图所示: 导致其在实际工作中碰到MySQL死锁异常、SQL性能太差、异常报错
  目前大部分后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。
 
  对MySQL的基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查等。
 
  所以很多后端开发人员眼中的MySQL如下图所示:
 
  
 
  导致其在实际工作中碰到MySQL死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。
 
  然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。
 
  为了解决这种知其然而不知其所以然的问题,本文将带着大家探索MySQL底层原理。
 
  这样大家碰到MySQL的一些异常或者问题时,能够直戳本质,快速地定位解决。
 
  一、连接管理
  系统(客户端)访问MySQL服务器前,做的第一件事就是建立TCP连接。
 
  经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。
 
  用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行;
  用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限。
  接着我们来思考以下问题:
 
  一个系统只会和MySQL服务器建立一个连接吗?
 
  只能有一个系统和MySQL服务器建立连接吗?
 
  当然不是,多个系统都可以和MySQL服务器建立连接,每个系统建立的连接肯定不止一个。
 
  所以,为了解决TCP无限创建与TCP频繁创建销毁带来的资源耗尽、性能下降问题。
 
  MySQL服务器里有专门的TCP连接池限制接数,采用长连接模式复用TCP连接,来解决上述问题。
 
  
 
  TCP连接收到请求后,必须要分配给一个线程去执行,所以还会有个线程池,去走后面的流程。
 
  这些内容我们都归纳到MySQL的连接管理组件中。
 
  所以连接管理的职责是负责认证、管理连接、获取权限信息。
 
  二、解析与优化
  经过了连接管理,现在MySQL服务器已经获取到SQL字符串。
 
  如果是查询语句,MySQL服务器会使用select SQL字符串作为key。
 
  去缓存中获取,命中缓存,直接返回结果(返回前需要做权限验证),未命中执行后面的阶段,这个步骤叫查询缓存。
 
  
 
  需要注意,select SQL字符串要完全匹配,有任何不同的地方都会导致缓存不被命中(空格、注释、大小写、某些系统函数)。
 
  小贴士:虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
 
  没有命中缓存,或者非select SQL就来到分析器阶段了。
 
  因为系统发送过来的只是一段文本字符串,所以MySQL服务器要按照SQL语法对这段文本进行解析。
 
  
 
  ​
 
  如果你的SQL字符串不符合语法规范,就会收到You have an error in your SQL syntax错误提醒。
 
  通过了分析器,说明SQL字符串符合语法规范,现在MySQL服务器要执行SQL语句了。
 
  MySQL服务器要怎么执行呢?
 
  你需要产出执行计划,交给MySQL服务器执行,所以来到了优化器阶段。
 
  
 
  优化器不仅仅只是生成执行计划这么简单,这个过程它会帮你优化SQL语句。
 
  如外连接转换为内连接、表达式简化、子查询转为连接、连接顺序、索引选择等,优化的结果就是执行计划。
 
  截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。
 
  于是就进入了执行器阶段,MySQL服务器终于要执行SQL语句了。
 
  
 
  开始执行的时候,要先判断一下对这个表有没有相应的权限,如果没有,就会返回权限错误。
 
  如果有权限,根据执行计划调用存储引擎API对表进行读写。
 
  
 
  存储引擎API只是抽象接口,下面还有个存储引擎层,具体实现还是要看表选择的存储引擎。
 
  讲到这里,上面提到的查询缓存、分析器、优化器、执行器都可以归纳到MySQL的解析与优化组件中。
 
  所以解析与优化的职责如下:
 
  缓存
  SQL语法解析验证
  SQL优化并生成执行计划
  根据执行计划调用存储引擎接口
 

(编辑:荆门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读