01 Mysql的基础框架
一、mysql基础架构
mysql服务端可以分为两个部分,Server层和引擎层。
Server层包括连接器、查询缓存、分析器、优化器、执行器等。
存储引擎层负责数据的存储和提取。 架构模式是插件式的,支持InnoDB(5.5.5以后默认)、MyIsam、Memory等多个储存引擎。
二、server层详解
1、 mysql自带的客户端,可以通过Cmd 到命令行界面
2、 登录mysql连接器 mysql>Mysql –u
u
s
e
r
–
p
{user} –p
user–p{password}
3、 数据库连接后可以查看数据库当前状态 mysql>show processlist (客户端长时间不连接,连接器自动断开。时间参数由wait_timeout控制,默认8h),连接的会话消息存储在连接器的内容中。由连接器对客户端进行校验,查阅USER表对用户host、user、pwd、具体权限进行校验。
查看连接信息。
4、 建立连接
4.1 长连接:连接成功后,客户端持续有请求,则一直使用同一连接。
4.2 短连接:每次执行完很少的几次查询就断开连接,下次查询再重建连接。
4.3 建立连接的过程通常十分复杂,故建议减少连接动作,多用长连接。
4.4 全部长连接,有时会导致mysql占内存过大,因为只有在连接断开时才会释放资源,所以会导致内存占用过大而oom,进而造成mysql异常重启。
4.5 全部长连接解决oom问题策略:i、定期断开长连接再重连(次选) ii、5.7以后版本,每次执行一个比较大的操作后,通过执行mysql_reset_connection来重新初始化链接。
5、查询缓存(弊大于利:每次对表单行数据更新,都会清空表缓存,对于更新频繁的数据库,缓存命中率很低),mysql8.0已废弃该功能,innoDB的缓存机制更优,而且还有LRU淘汰机制。
建连完成,就可执行select语句了。执行逻辑第二步:查询缓存。
6、分析器
对输入的字符串进行语法分析,识别操作语句、表、数据等有效信息。
经过分析器分析后,最终形成树状结构。
7、优化器
Mysql在明白你要做什么后,再对输入的语句进行优化。
7.1 当表内存在多个索引,优化器决定使用哪个索引;
7.2 一个语句有多表关联时,决定各表的链接顺序
8、执行器
执行的顺序:先检查用户对表有没有执行该操作的权限 —> 打开表找到表的引擎,使用引擎提供的接口。
8.1 没有索引时,查询操作会逐句执行逻辑判断操作,直至结束
8.2 对于有索引的表,执行的逻辑也差不多。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。
你会在数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。
在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的。