MySQL系列-1架构基础

本篇是MySQL文章系列第一章,讲解MySQL架构基础。
知道MySQL各组件之间如何协同工作,有助于深入理解MySQL,当遇到MySQL的一些异常或问题后,能更快的定位并解决问题。下面展示了MySQL的基本架构图。
MySQL逻辑架构图

大体来说,MySQL可以分成Server层和存储引擎层

Server层包含了大多数MySQL的核心服务功能,如连接器、查询缓存、解析器、优化器、执行器等,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎负责MySQL中的数据存储和读取,每个存储引擎都有它的优势和劣势。服务器通过API与存储引擎进行通信。现在最常用的存储引擎是InnoDB,从MySQL 5.5.5版本开始成为了默认存储引擎。

依次看下每个组件的作用:
1.连接器
当客户端连接到MySQL服务器时,服务器对其进行认证。认证基于用户名、原始主机信息和密码。认证通过后服务器会继续验证客户端拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。
客户端如果长时间没交互,则会自动断开。由wait_timeout参数控制,默认值是8小时。

数据库里,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是每执行完很少的几次查询就断开连接,下次查询时重新建立连接。
建立连接的过程是比较复杂的,因此建议尽量使用长连接,减少建立连接的动作。
但是全部使用长连接后,可能有时候MySQL占用内存涨得特别快,这是因为MySQL在执行过程中临时使用的内存是管理在连接对象里的,这些资源在断开连接才释放。所以长连接累计下来,可能会导致内存占用太大,被系统强行杀掉(OOM)。从现象看就是MySQL异常重启了。
解决这个问题可以考虑2种方案
1.定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。
2.如果用的是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_rest_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

2.查询缓存
对于select语句,在解析查询之前,服务器会先检查查询缓存。如果能在其中找到对应的查询,服务器直接返回查询缓存中的结果集。
需要注意的是,MySQL 8.0开始没有这个功能了。

3.解析器
如果没有命中查询缓存,就开始执行语句。
MySQL会解析查询,并创建内部数据结构(解析树)。
解析器先会做词法解析。对一条SQL语句,MySQL需要识别出里面的字符串分别是什么,代表什么。
做完了这些识别以后,就要做“语法解析”。根据解析的结果,语法解析器会根据语法规则,判断输入的这个SQL语句是否满足MySQL语法。

4.优化器
经过了解析器,MySQL就知道要做什么了。在开始执行之前,还要先经过优化器的处理。
如表的读取顺序,选择合适的索引等。

5.执行器
MySQL通过解析器知道要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。
开始执行的时候,要先判断对这个表有没有执行的权限,如果没有,就会返回没有权限的错误。
如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值