MySQL学习笔记一之架构@TOC
架构图如下
Server层
连接器
- 负责跟客户端建立连接、获取权限、维持和管理连接
- 客户端如果太长时间没有动静,连接器会将其自动断开,时间由参数wait_timeout控制,默认值八小时
- 长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接
- 使用长连接后内存会涨的特别快,因为mysql执行过程中临时使用的内存是管理在连接对象里的,这些资源会在连接断开的时候才释放
- 解决方案:
- 定期断开长连接
- 5.7以上的版本,可以在每次执行一个比较大的操作之后通过执行mysql_reset_connection来重新初始化资源,该过程不需要重新连接和做权限验证,但是会把连接回复到刚刚创建完的状态
- 解决方案:
- 使用长连接后内存会涨的特别快,因为mysql执行过程中临时使用的内存是管理在连接对象里的,这些资源会在连接断开的时候才释放
- 短连接是指每次执行完很少的几次查询以后就断开连接,下次查询重新建立一个。
查询缓存
- 拿到查询请求后,会先到查询缓存中看是否命中,命中的话直接返回。之前执行过的语句会以key-value的形式直接缓存在内存中,key是查询的语句,value是查询的结果
- mysql默认按需使用的方式开启功能
- 该功能弊大于利:失效频繁
- 只要有对一个表的更新,这个表上的所有的查询缓存都会被清空
- 8.0版本删除了这个功能
分析器
- 词法分析:识别出字符串是什么
- 语法分析:根据语法规则判断sql语句是否合法
执行器
- 执行前,会先判断你对这个表有没有查询权限
- 数据库的慢查询日志中看到一个rows_examined字段,表示这个语句执行过程中扫描了多少行。
- 引擎扫面行数跟rows_examined并不是完全相同。
存储引擎层
官方存储引擎
第三方存储引擎
连接方式
- TCP/IP套接字方式。建立基于网络的连接请求
- 命名管道和共享内存。在同一台服务器
- unix套接字。[mysql -udavid -S /tmp/mysql.sock]