MySQL基础架构

MySQL 基本架构.png

mysql分为sever层和存储引擎层:

  • sever层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
  • 存储引擎层负责数据的存储和提取,使用的是插件式,可支持innodb、memory、myisam等

(1)连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接


连接器.png
相关命令/参数

wait_timeout:连接器保持和客户端空闲连接时间,超时会断开
show processlist:显示用户运行线程

思考

①为什么推荐使用长连接?

  • 建立连接的过程通常比较复杂

②推荐使用长连接,但如何解决长连接内存占用太大问题?

  • 定期断开长连接
  • MySQL 5.7 及以上,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

(2)查询缓存(MySQL 8.0 版本已去掉查询缓存)

查询缓存.png
思考

①为什么不推荐使用查询缓存?查询缓存适用场景?如何按需使用缓存?

  • 查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空
  • 适用场景:静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存
  • mysql8.0以前可以按需使用缓存:select SQL_CACHE * from T where ID=10;(需要将query_cache_type设置成 DEMAND)

query_cache_type=0/OFF:关闭查询缓存。
query_cache_type=1/ON:开启查询缓存。
query_cache_type=2/ DEMAND :当使用 SELECT SQL_CACHE会开启缓存

(3)分析器

词法分析(sql中每个字符串代表什么)
语法分析(sql是否符合mysql语法)

(4)优化器

确定使用什么索引,怎么进行连接表等,最终确认一个执行方案

思考

①优化器是怎么选择索引的,有没有可能选择错?

  • 根据扫描行数、是否排序、是否使用临时表、是否回表等

(5)执行器

执行器.png

慢查询日志中rows_examined的字段,表示这个语句执行过程中扫描了多少行。这个值是在执行器每次调用引擎获取数据行的时候累加的。
在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的

思考

①有索引和无索引执行器的执行流程?(以select * from T where ID=10为例)

  • 扫描满足的行与全表扫描再判断的区别(这个过程是执行器调用引擎接口执行的)
参考:

[1]极客时间

你可能感兴趣的:(MySQL基础架构)