MYSQL的逻辑架构
预览
MYSQL的逻辑架构
连接器
连接器模块在MYSQL架构中的作用主要是管理连接和权限控制,它的主要工作有以下两件事:
- 校验客户端请求连接的账号密码的正确性
- 拉取该用户对应的操作权限,并缓存在连接中,此后的操作的权限判断都是根据本次拉取的结果进行判断的
MYSQL中使用连接为长连接,在执行的过程中产生的对象都是由连接进行管理的,只有连接断开时,这些对象才会被释放,所以如果连接一直不断开,内存会一直增长,直到OOM导致MYSQL重启,解决方法有两种:
- 定期断开长连接
- 定期执行mysql_reset_connection(MYSQL5.7后才可以使用),该指令会将连接重置成刚创建的时候
缓存查询
MYSQL会将查询的结果做一次缓存,缓存的key就是查询语句,value为查询的结果,当这张表存在任意写操作的时候,该表对应的缓存都会失效。
MYSQL的查询缓存在大多数的场景下作用不大,因为对于数据量大的表,其写操作必然很多,所以缓存大多是失效的,而对于那种系统配置的表,写操作很少,但是数据量也不会很大,多数系统会直接将数据缓存到应用中。在MYSQL8.0版本后,缓存查询模块被移除了。
分析器
分析器主要做了两件事:
- 词法分析
- 语法分析
优化器
同一条sql,应该选择那条索引,where条件的执行顺序应该是什么样的,这些都是优化器需要做的
执行器
- 表权限判断
- 调用对应的存储引擎接口执行操作
binlog
MYSQL用于归档的日志模块,主要用于将数据库中的数据恢复到指定的时间点(InnoDB中有一个redo log,后面会详细的讨论这两种log的区别和作用)