MySQL基本架构及各个组件的作用

基本架构

MySQL大体上来说,可以分为Server层和存储引擎两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。逻辑架构图如下图所示。

在这里插入图片描述
接下来分别说明Server层每个组件的作用。

连接器

主要用于与客户端建立连接、获取权限、维持和管理连接,连接命令: mysql -h$ip -P$port -u$user -p 输完命令后,输入密码,如果密码正确,会到权限表中查看该用户拥有的权限,这个连接里面的权限判断逻辑都依赖于登录时查到的权限,也就是说连接的权限仅取决于连接建立时的权限,修改权限的话,要重新建立新的数据库连接。

数据库建立连接的过程比较复杂,尽量使用长连接来减少建立连接的动作。但是全部使用长连接会导致MySQL占用的内存涨的特别快,因为MySQL在执行过程中临时使用的内存是管理在连接对象里面,这些资源在连接断开的时候才会得到释放。当内存占用太大的时候,就会被系统强行杀掉(OOM),造成MySQL异常重启。

考虑以下两种方案来解决这个问题:
- 定期断开长连接。
- 每次执行一个占用内存比较大的查询后,执行mysql_reset_connection重新初始化连接资源。这个过程不需要重连和重新做权限验证,但会将连接恢复到刚创建的状态。

查询缓存

MySQL在拿到查询请求后,会先到查询缓存中查找结果,如果之前执行过这个查询语句,那么语句及其查询结果会以key-value对的形式保存在内存中,key是语句,value是结果,这时就直接把value返回给客户端。

一般不建议使用查询缓存,因为查询缓存失效非常频繁,只要对表进行了更新,那么关于这个表的所有查询缓存都被清空,所以如果对于一个更新压力大的数据库,查询缓存的命中率就会很低 。

可以通过设置query_cache_type为DEMAND,这样默认的SQL语句都不使用查询缓存。

ps:MySQL8.0版本删除了查询缓存的功能。

分析器

分析器先做词法分析,通过分析你输入的SQL语句来识别出里面的字符串分别是什么,代表什么。

做完词法分析后,再做语法分析,分析器根据语法规则,判断你输入的这个SQL是否满足MySQL语法。

优化器

经过分析器的SQL语句,会到优化器进行优化处理,比如表里面如果有多个索引的时候,决定用哪个索引;或者是多表关联查询的时候,决定表的连接顺序。

执行器

语句经过优化后,就要进入执行阶段,开始执行的时候,要先判断权限,如果没有,就返回没有权限的错误。如果有权限,就打开表继续执行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值