MySQL基本架构示意图
image.png大体来说,MySQL可以分为Server层和存储引擎层两部分
连接器
连接完成后,如果没有后续动作,这个连接就处于空闲状态,可以使用show processlist命令查看。
image.png
若客户端太长时间没有动静,连接器就会自动断开。这个时间由参数wait_tiemout控制,默认是8小时。
建立连接的过程比较耗时,故尽量减少建立连接的动作,也就是尽量使用长链接。但有时候MySQL占用内存涨的特别快,这是因为MySQL在执行过程临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以长连接积累下来,可能会导致内存占用太大,被系统强行杀掉OOM
解决方案
- 定期断开连接,或执行过一个占用内存较大的查询后,断开连接重新连接
- MySQL5.7版本后,可以通过mysql_reset_connection重新初始化连接资源
查询缓存
大多数情况下,不建议使用查询缓存,原因是弊大于利
查询缓存的失效非常频繁,只要对一个表有更新,缓存都会被清空,命中率非常低。8.0版本后已经删除这个功能里
分析器
如果没有命中缓存,就开始真正执行语句了。词法分析和语法分析就在这里完成
网友评论