MySQL基础架构

  • MySQL架构图

  • 连接器:连接命令mysql -hlocalhost -P 3306 -uroot -proot,服务端建立连接,完成TCP握手,连接器开始认证您的身份;如果密码不对会受到Access denied for user的错误,然后客户端程序结束,认证通过连接器会到权限表里面查出拥有的权限,将依赖此时读到的权限;连接完成如果没有后续动作,这个连接处于空闲状态,你可以在show processlist命令查看到;command列显示Sleep,表示空闲连接; 连接器太长时间没连接,连接器会自动断开,参数wait_timeout控制,默认8小时。连接断开之后,客户端发送请求会受到错误,lost connection to mysql server...

  • 查询缓存:拿到查询请求后,会先到缓存看看,是否执行过这条语句,之前执行过的语句,可能会以key-val对的形式被直接缓存到内存中,key是查询到的语句,value是查询的结果。如果找到缓存key,value会直接返回给客户端;查询缓存的失效非常频繁,只要对一个表更新,查询的缓存都会被清空,因此你可能费劲把结果存起来,还没有使用,就被更新全清空了,对于更新压力大的数据库来说,查询缓存的命中率非常低,除非你的业务就是一张静态表,很长时间才更新;比如系统配置表;MySQL8.0直接删除了整个查询缓存功能;因为查询缓存往往弊大于利。

  • 分析器 : 如果没有命中查询缓存,就要真正执行语句了,分析器先会做词法分析,根据语法分析,是否满足MySQL语法;

  • 优化器:开始执行时,先判断你对这个表有没有执行的权限,如果没有则返回权限错误,如果命令缓存,会在查询缓存返回结果时,做权限验证;至此语句执行完成了;

posted @ 2021-02-22 14:38  惊风破浪的博客  阅读(34)  评论(0编辑  收藏  举报