01笔记 | 基础架构:一条SQL查询语句是如何执行的?

MySQL基本架构示意图

image.png

大体来说,MySQL可以分为Server层和存储引擎层两部分

连接器

连接完成后,如果没有后续动作,这个连接就处于空闲状态,可以使用show processlist命令查看。


image.png

若客户端太长时间没有动静,连接器就会自动断开。这个时间由参数wait_tiemout控制,默认是8小时。
建立连接的过程比较耗时,故尽量减少建立连接的动作,也就是尽量使用长链接。但有时候MySQL占用内存涨的特别快,这是因为MySQL在执行过程临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以长连接积累下来,可能会导致内存占用太大,被系统强行杀掉OOM
解决方案

  1. 定期断开连接,或执行过一个占用内存较大的查询后,断开连接重新连接
  2. MySQL5.7版本后,可以通过mysql_reset_connection重新初始化连接资源

查询缓存

大多数情况下,不建议使用查询缓存,原因是弊大于利
查询缓存的失效非常频繁,只要对一个表有更新,缓存都会被清空,命中率非常低。8.0版本后已经删除这个功能里

分析器

如果没有命中缓存,就开始真正执行语句了。词法分析和语法分析就在这里完成

优化器

你可能感兴趣的:(01笔记 | 基础架构:一条SQL查询语句是如何执行的?)