0、MySQL基础架构

MySQL基础架构

基础架构图

Server层

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

存储引擎层

存储引擎层负责数据的存储和提起。最常用存储引擎是InnoDB,MySQL 5.5.5以后的默认存储引擎。不同存储引擎公用一个Server层。

Server层组件

连接器

连接器负责跟客户端建立连接,获取权限、维持和管理连接。当用户名密码验证通过后,连接器会到权限表中查出所拥有的权限,如果此时管理员对权限做了修改,也不会影响当前连接的权限,除非断开连接重连。Mysql会自动断开长时间空闲连接,默认8小时(wait_timeout设置)。
由于数据库建立连接比较复杂,所以在应用中尽量减少建立连接的次数,也就是使用长连接,但是会导致OOM(Mysql临时使用内存是管理在连接对象里面的,连接断开采释放),Mysq异常重启。解决方案:

  • 定期断开长连接
  • Mysql 5.7及以上版本,执行mysql_reset_connection重新初始化连接资源。

查询缓存

缓存中存储的是之前已经查询过的结果,key-value形式保存(key:sql value:查询结果),如果命中直接返回客户端。但是查询缓存命中较低,原因是如果对一张表做了更新,那么这张表的所有查询缓存都会被清空。但是如果是静态表,则比较适合用查询缓存。(MySQL 8.0已经删除了该功能)

  • 按需使用查询缓存(设置如下参数):
    query_cache_type = DEMAND
  • SQL(用SQL_CACHE显示指定):
    mysql> select SQL_CACHE * from T where ID=10;

分析器

分析SQL要做什么

  • 词法分析:Mysql需要识别SQL中的字符串分别是什么,代表什么。(是什么语句,表名,列名等)
  • 语法分析:根据语法规则判断SQL语句是否满足MySQL语法。

优化器

优化查询。在表里面有多个索引的时候,决定使用哪个索引或关联查询时决定表的连接顺序。

执行器

通过分析器知道了要做什么,通过优化器知道了怎么做,然后开始执行语句。但是在执行前会先判断用户是否对该表有查询权限,没有返回错误。(在查询缓存时,如果命中缓存,会在返回结果的时候做权限验证,查询也会在优化器之前调用precheck验证权限),然后调用引擎提供的接口。

SELECT语句执行过程

  • 第一步:通过连接器连接数据库,连接成功后会获取相关权限。
  • 第二步:查询缓存。如果缓存中存在则直接返回,否则开始真正执行查询。
  • 第三步:分析器分析SQL语句要做什么,并校验SQL语句是否合法。
  • 第四步:知道要做什么之后,优化器优化SQL(选择索引、关联顺序等)
  • 第五步:执行器开始执行SQL,调用引擎提供的接口获取数据并返回。
posted @ 2021-10-28 20:19  kevin_cy  阅读(35)  评论(0编辑  收藏  举报