MySQL整体架构

1 客户端

● 客户端为连接MySQL服务端的工具或者驱动,比如JDCB,ODBC等等

● 用于连接目前服务器,并且发送需要执行的SQL

2 服务端
2.1 Server层

● 负责处理SQL语句,解析优化,缓存等

● 提供权限管理,用户认证

● 提供了各种SQL函数和存储过程

● 提供了复制,备份,恢复等高级功能

● Server层有自己的日志系统,binlog日志

● binlog记录了所有的DML(INSERT,UPDATE,DELETE)语句

● binlog只要用于复制和恢复操作

2.1.1 连接器

● 负责接收客户端的连接

● 验证是否有权限登录

● 维护连接

● 默认异连接上的客户端空闲8小时后会被服务端主动断开

连接应该注意的问题

● 频繁创建关闭连接可能会对性能产生负面影响通常连接管理数据连接

● 使用长连接时有可能因为产时间运行导致MySQL服务端内存占用高未释放问题执行RESET CONNECTION命令重置mysql连接释放内存本地使用MySQL8执行命令报错)

2.1.2 查询缓存

● MySQL5.7版本查询先查询缓存此语句是否执行

● 之前执行SQL语句作为key查询结果作为value存储查询缓冲

● 如果命中缓存将直接返回查询结构

● 如果命中真正执行查询逻辑

相关参数

● query_cache_size:用于缓存大小

● query_cache_type:设置使用缓存的场景

○ 0(OFF):使用query cache

○ 1ON)使用query cache

○ 2DEMOND):查询时使用sql_cache参数才使用query cache

● MySQL8去除了查询缓存机制

● 因为对于更新频发来说,缓存命中非常低

● 对于静态普遍都会业务层缓存不会使用MySQL缓存数据

2.1.3 词法器

● 查询缓存命中执行分析器来分析sql语句是否合法主要进行词法分析语法分析两个阶段

● 词法分析

○ 主要负责SQL语句提取关键字比如表名字段等等

○ 词法分析阶段information_schema获取结构信息

● 语法分析

○ 判断输入语句是否满足MySQL语法

○ 如果语法错误就会返回错误提示

● 分析阶段也会数据权限数据权限进行验证

2.1.4 优化器

● 经过了分析语法正确进入优化器

● 优化器作用查询重写选择最佳执行路径生成执行计划

● 查询重写:对原始查询SQL进行重写比如子查询转换join连接

● 选择最佳执行路径基于统计信息选择使用哪个索引确定连接顺序以及是否使用临时表文件排序策略

● 生成执行计划:基于以上分析,生成SQL执行计划,详细描述如何存储引擎获取数据进行过滤排序聚合操作

2.1.5 执行器

● MySQL通过分析器知道了你要做什么

● 通过优化器知道了怎么

● 通过执行开始执行语句

打开表时候执行器就会根据标的引擎定义去使用这个引擎提供接口

● 调用引擎接口这个第一行判断是否满足条件如果不是如果这行存在结果集中

● 调用引擎接口获取下一行重复相同判断逻辑知道这个最后一行

● 执行上述遍历过程所以后满足条件组成记录作为结果返回客户端

2.2 存储引擎层

● 负责数据的存储和检索

● MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory等等

● InnoDB是MySQL默认的存储引擎,支持事务,行级锁以及外键约束

● InnoDB有自己的日志系统,redo log(重做日志)和undo log(撤销日志)

● redo log用于保证事务的持久性

● undo log用于支持事务的原子性和多版本并发控制(MVCC)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值