面试:MySQL 架构
面试:MySQL 架构
总体来说 MySQL 可以分为两层,第一层是 MySQL 的服务层,包含 MySQL 核心服务功能:解析、分析、优化、缓存以及内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第二层是 MySQL 的 存储引擎层,MySQL 中可使用多种存储引擎:InnoDB、MyISAM、Memory。存储引擎负责 MySQL 中数据的存取。服务层通过统一的 API 与存储引擎进行通信,这些 API 屏蔽来同步存储引擎之间的差异,使得这些差异对上层的查询过程透明。
MySQL Server
连接器
连接器负责跟客户端建立连接、获取权限、维持和管理连接。
查询缓存
查询缓存将查询结果按 K-V 的形式进行缓存,K 是查询的语句,V 是查询的结果。当一个表发生更新后,该表对应的所有缓存均会失效。
分析器
分析器有两个功能:词法分析、语法分析。对于一个 SQL 语句,分析器首先进行词法分析,对 SQL 语句进行拆分,识别出各个字符串代表的含义。然后就是语法分析,分析器根据定义的语法规则判断 SQL 是否满足 MySQL 语法。
优化器
优化器在获取到分析器的结果后,通过表结构和 SQL 语句选择执行方案,比如:多表关联时,各个表如何进行连接;当表中有索引时,应该怎样选择索引 等等。
执行器
获取到执行方案后,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。在进行查询时,MySQL 执行器内部执行步骤如下:
- 调用引擎接口取这个表的第一行,判断该行是否满足 WHERE 子句,如果满足则将这行存在结果集中,否则跳过。
- 调用引擎接口取下一行,重复相同的判断逻辑,直到取到这个表的最后一行。
- 执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。
对于走索引的查询,执行的逻辑也差不多。第一次调用的是 取满足条件的第一行 这个接口,之后循环取 满足条件的下一行 这个接口,这些接口都是引擎中已经定义好的。
Update 处理逻辑
这里简单的分析下 Update 的处理逻辑
- MySQL Server 发送更新请求到 InnoDB 引擎
- 从 Buffer Pool 加载对应记录的 Data Page(P1)
- 若 Buffer Pool 中没有该记录,则从磁盘加载该记录
- 将 P1 存储到 Undo Page 中,并在 Redo Log Buffer 中记录 Undo 操作
- 更新 P1 为 P1’ ,并将 P1’ 写入 Dirty Page ,记录变更到 Redo Log Buffer(Prepare 状态)
- 返回 MySQL Server 执行完成
- MySQL Server 记录 binlog
- MySQL Server 提交 Commit
- Redo Log Buffer 状态有 Prepare 更改为 Commit,并刷入磁盘
- 当 Dirty Page 过多时,启动 ChcekPoint 机制,将脏页刷入磁盘
面试:MySQL 架构相关推荐
- 面试:MySQL篇,详尽知识点总结
面试:MySQL篇 本篇文章是本人在结合书籍和博客并结合个人理解总结的相对完全的MySQL面试知识点,部分内容在下方给出参考博客的链接和书籍,以供读者进行参考和深入的理解该部分知识点,针对部分知识点可 ...
- 23.5 MySQL架构
5 MySQL架构 MySQL是C/S 架构的,connectors是连接器:可供Native C API.JDBC.ODBC.NET.PHP.Perl.Python.Ruby.Cobol等连接mys ...
- Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)
这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...
- 面试经验谈架构(转)
##################################################### #本文内容来自<老男孩linux运维实战培训>学生-郑东旭 #如有转载,请务必保 ...
- 【JAVA核心知识】29:MySQL架构基础篇 ---《高性能MySQL》读书笔记
MySQL架构基础篇 MySQL逻辑架构 MySQL的缓冲池 存储引擎 InnoDB 锁 锁级别 死锁 事务 事务的ACID 事务的隔离级别 事务中混合使用存储引擎 binlog,redolog与un ...
- mysql事务的优点和缺点_OLTP应用之MySQL架构选型--图文教程
在我们下定决心将企业核心应用从企业级数据库迁移到开源数据库产品.使用本地磁盘代替共享存储之前.我觉得我们必须要面对并回答以下几个问题之后才能真正的将开源进行到底,将想法付诸于实践. 下面我们来看一下我 ...
- 浅析电商、社区、游戏常用的 MySQL 架构
一般.或者必须是这样.MySQL 架构一定要结合业务来分析.设计.优化 所以不管是那种架构.根据业务要求组合成符合需求的即是最好的.不能泛泛而谈 同时.也必须注意数据的安全(如ipsec, ...
- PHP面试MySQL数据库的索引
你好,是我琉忆,PHP程序员面试笔试系列图书的作者. 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识 周三:PHP面试MySQL数据库的索引 周五 ...
- MYSQL性能调优及架构设计学习笔记-基础篇MYSQL架构组成
为什么80%的码农都做不了架构师?>>> 目录 小结 MYSQL物理文件组成 MYSQL系统架构 MYSQL自带工具使用介绍 小结 本章主要从逻辑层与物理层两个方面介绍了MYS ...
最新文章
- Lampiao靶机渗透测试
- 2017-6-3 jQuery 事件 DOM操作
- ✳编程求当n≤100时,n!的准确值
- 7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗
- OFD文件结构--带签名
- 如今有线电视还有必要续费吗
- 清华博导尹首一, 带你吃透 AI 芯片来龙去脉!
- spring源码之bean加载(bean解析下篇)
- vb集合类接收子类事件时,给集合类赋值应注意的一个定义
- Direct3D光与材质的颜色值
- Silverlight中无法设置卫星程序集为中立资源程序集
- php中联合运算符,PHP-串联运算符
- 最新阿里巴巴Java开发手册发布和下载
- 【转】区块链底层架构概览:第一原则框架
- levene ttest
- MVX相关设计模式的理解。
- 玩冒险岛java卸载_冒险岛(经典版)卸载数据包方法
- IT6801FN中文版
- 拥塞控制,CDN,端到端
- 移动端H5页面设计知识