MySQL

MySQL的基础架构

2020-07-23  本文已影响0人  三不猴子

MySQL的基础架构

首先先通过一张图来看看mysql的整体架构


image.png

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

连接器

使用数据库的第一步就是登陆数据库,首先你会连接数据库,连接器负责跟客户端建立连接、获取权限、维持和管理连接。我们在刚学Java JDBC连接数据的时候就知道获取一个连接对象是非常耗费资源的一件事,所以尽量少进行连接操作,也就是使用长连接操作,如果使用太多长连接又会导致mysql内存异常过大,导致oom异常重启mysql,所以有以下方法可以解决。

  1. 定期断开⻓连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

  2. 如果你用的是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初 始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

查询缓存

连接建立完成后就可以使用select语句了,所以执行逻辑到达了第二步:查询缓存。mysql在拿到一个查询语句时,先判断这个查询是不是之前查询过,有没有在mysql的查询缓存中,命中缓存就直接返回效率非常高,通常的建议是不用使用缓存,mysql的缓存弊大于利为什么mysql的缓存弊大于利呢?因为查询缓存失效非常频繁,只要对一个表更新,这个表上的所有查询都会失效。在mysql8.0已经彻底移除查询缓存了。

分析器

如果没有命中缓存,那么就该执行sql语句了,首先mysql要知道你要做什么,所以要分析sql语句。

优化器

知道了你要做什么在具体执行之前那么就该确定怎么做,选择一个mysql认为最佳的方式执行sql,优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

执行器

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

上一篇下一篇

猜你喜欢

热点阅读