MySQL体系结构解密:深入探索数据库内部工作原理的奥秘

一、初识MySQL

按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
MySQL是关系型数据库,数据存储再磁盘中。操作MySQL时需要落盘才会返回。

1.1、OLTP

OLTP,全称On-Line transaction processing,即翻译为联机事务处理。主要对数据库增删改查。
OLTP 主要用来记录某类业务事件的发生;数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功。

1.2、OLAP

OLAP,全称On-Line Analytical Processing,即翻译为联机分析处理。主要对数据库查询。
当数据积累到一定的程度,需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做 OLAP 了。

1.3、SQL

结构化查询语言(Structured Query Language) 简称 SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL 是关系数据库系统的标准语言。

关系型数据库包括:MySQL, SQL Server, Oracle, Sybase,postgreSQL 以及 MS Access等。

关系型数据库
MySQL
SQL Server
Oracle
Sybase
postgreSQL
Access

SQL 命令包括:DQL、DML、DDL、DCL以及TCL。

(1)DQL,全称Data Query Language,即数据查询语言。

select:从一个或者多个表中检索特定的记录。

(2)DML,全称Data Manipulate Language,即数据操作语言。

insert:插入记录。
update:更新记录。
delete:删除记录。

(3)DDL,全称Data Define Languge,即 数据定义语言。

create:创建一个新的表、表的视图、或者在数据库中的对象;
alter:修改现有的数据库对象,例如修改表的属性或者字段;
drop:删除表、数据库对象或者视图;

(4)DCL,全称Data Control Language,即 数据控制语言。

grant:授予用户权限;
revoke:收回用户权限;

(5)TCL,全称Transaction Control Language ,即 事务控制语言。

commit:事务提交;
rollback:事务回滚;

1.4、数据库术语

  1. 数据库:数据库是一些关联表的集合。
  2. 数据表:表是数据的矩阵。
  3. 列:一列包含相同类型的数据。
  4. 行:或者称为记录是一组相关的数据。
  5. 主键:主键是唯一的;一个数据表只能包含一个主键。
  6. 外键:外键用来关联两个表,来保证参照完整性;MyISAM 存储引擎本身并不支持外键,只起到注释作用;而 innoDB 完整支持外键。
  7. 复合键:或称组合键,将多个列作为一个索引键。
  8. 索引:用于快速访问数据表的数据;索引是对表中的一列或者多列的值进行排序的一种结构。

二、MySQL体系结构

mysql_arch
MySQL 由以下几部分组成:

  1. 连接池组件。管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。
  2. 管理服务和工具组件。系统管理和控制工具,例如备份恢复、MySQL 复制、集群等。
  3. SQL 接口组件。将 SQL 语句解析生成相应对象;DML,DDL,存储过程,视
    图,触发器等。
  4. 查询分析器组件。将 SQL 对象交由解析器验证和解析,并生成语法树。
  5. 优化器组件。SQL 语句执行前使用查询优化器进行优化;选择执行效率最优的方案。
  6. 缓冲组件。是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影
    响。
  7. 插件式存储引擎。
  8. 物理文件。

MySQL的连接者:不同语言的代码程序和 MySQL 的交互(SQL交互)。

2.1、连接池

连接池主要 管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。

网络处理流程:主线程接收连接,接收连接交由连接池处理。

交由
主线程接收连接
连接池处理

主要处理方式:IO多路复用 select + 阻塞的 IO。
mysql_threads

每个连接,MySQL都会为每个客户端 fd 分配一个连接线程,专门负责处理该客户端的 sql 命令处理。

MySQL命令处理是多线程并发处理的,默认最大线程数是151个,超过151就无法操作了。另外,MySQL是采用短连接的方式,长时间没有操作MySQL的连接会被MySQL主动断开,回收资源。

2.2、缓冲组件

缓冲组件是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影响。

在数据库进行读取页操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中,若在缓冲池命中,直接读取;否则读取磁盘中的页,说明该页被 LRU 淘汰了。缓冲池中 LRU 采用最近最少使用算法来进行管理。

缓冲池缓存的数据类型有:索引页、数据页、以及与存储引擎缓存相关的数据(比如innoDB 引擎:undo 页、插入缓冲、自适应 hash 索引、innoDB 相关锁信息、数据字典信息等)。

三、执行select语句的过程

执行一条select语句时,会经过:

  1. 连接器:主要作用是建立连接、管理连接及校验用户信息
  2. 查询缓冲:查询缓冲是以key-value的方式存储,key就是查询语句,value就是查询语句的查询结果集;如果命中直接返回。注意,MySQL 8.0已经删除了查询缓冲。
  3. 分析器:词法句法分析生成语法树。
  4. 优化器:指定执行计划,选择查询成本最小的计划。
  5. 执行器:根据执行计划,从存储引擎获取数据,并返回客户端。
select执行过程
no
yes
分析器
select ...
连接器
查询缓存
是否命中
返回结果 给客户端
优化器
执行器
从存储引擎获取数据

总结

  1. 了解SQL的命令术语DML、DDL、DCL、DQL、TCL。
  2. 数据库专业术语:数据库、数据表、主键、外键、复合键、行、列、索引。
  3. MySQL体系架构由 连接池、系统管理和工具组件、SQL接口、分析器、优化器、缓冲组件、插件式存储引擎、物理文件 几个部分组成。
    在这里插入图片描述
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值