Server层:连接器,查询缓存,分析器,优化器,执行器
存储引擎是插件式的,不同的存储引擎公用一个 server 层。
1、连接器
负责跟客户端建立连接,获取权限,维持和管理连接
客户端通过连接器,连接到mysql 服务器
长连接占用内存过大的问题:
- 定期断开占用内存过大的长连接重连
- Mysql5.7 之后,可以通过执行 mysql_reset_connection 来重新初始化连接资源,不需要重连和权限验证,会恢复到刚刚建立连接的状态
2、查询缓存
更新操作会将一个表的查询缓存全部清空,因此 8.0 中将整个功能删除了
3、分析器
进行词法分析和语法分析,并创建内部数据结构(解析树)
词法分析:将用户输入的内容进行分析识别
语法分析:判断输入的 sql 是否符合语法规则
4、优化器
Mysql 在这一步对其进行各种优化:重写查询,决定表的读取顺序,选择合适的索引
5、执行器
执行之前,判断用户对表是否有执行权限,没权限的话报错
mysql> select * from T where ID=10;
ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T'