Mysql逻辑架构
image.png- 如图所示,Mysql的架构分为Server层和引擎层。Server层由连接器、分析器、查询缓存、优化器和执行器组成,Server层主要是完成存储过程、触发器、视图等。存储引擎用来存储数据,提供数据读写接口。
连接器
连接语句
mysql -h ip -p port -u user -p
连接器用来处理客户端的连接。当有客户端通过TCP连接到服务器时,连接器首先检查用户权限,没有权限或者用户名或密码错误则显示错误信息。连接之后可以通过
show processlist
查看连接状态。保持连接时间是8小时。
- 长连接是指多个连接持续请求请求可以复用一个连接。由于连接的创建是比较复杂的,所以应该尽量使用长连接。但是长连接会导致内存涨的比较快,因为内存是管理在连接对象中的。解决方法有:定时断开长连接;如果是5.7或者更高版本,可以执行
mysql_reset_connection
查询缓存
查询缓存是缓存查询的结果集,但是当表更新之后,关于这张表的查询缓存会全部失效,因此查询缓存命中会很低。因此一般会禁用查询缓存。可以通过
query_cache_type=DEMAND禁用。在8.0以及更高版本中,已经去掉查询缓存了。
分析器
分析器会对语句进行词法分析和语法分析,其中词法分析会将语句拆分成多个字符。取出其中的关键字和数据库表名和字段等字符串。然后通过语法分析解析语句,生成语法树,这个时候会检查语句是否符合语法。
优化器
优化器会选择适当的执行方式,比如说多表进行join时是先取哪张表,选择索引还是全表扫描,选择哪个索引等,这些选择会由选择器进行分析选择最优方案。
执行器
执行器执行语句时会判断对于这张表是否有权限,没有的话保错。否则扫描行选择结果集并返回。
存储引擎
存储引擎可以在create table时指定,5.5.5版本之后默认引擎是innoDB。innoDB由于支持事务、行级锁,因此是使用较为频繁的执行引擎
网友评论