一、CS模型
tcp/ip
socket
二、实例构成
实例 = mysqld + 预分配的内存
= mysqld + Mseter Thread + N个工作线程 + 预分配的内存结构
老板 经理 员工 办公区
三、mysqld 的结构
范例讲解: 一条SQL语句的执行过程
命令:select user,host from mysql.user;
step1:连接层
- 提供连接协议
tcpip
socket - 提供验证功能
用户 密码 IP合不合法 - 提供专用的连接线程
接收SQL
返回结果
step2:SQL层
- 验证语法
- 语义检查:检查是什么类型的语句(DDL、DCL、DML、DQL)
- 权限检查:检查登录用户是否具备执行某些语句的权限
- 解析器: 将SQL语句解析成多种执行计划(预处理)
- 优化器: 根据解析器解析出的执行计划的“代价”评估,选择代价最小的
代价: 系统资源的消耗(CPU,MEM,IO) - 执行器: 根据选择后的执行计划,运行SQL语句,得出执行结果.
执行结果?
你需要的数据,在磁盘的xxxx位置上。 - 查询缓存
- 日志记录(二进制)
step3:存储引擎层(文件系统)
拿着执行器的结果,去磁盘找到相应的数据。结构化成用户能看懂的格式(表)
四、mysql 数据库的逻辑结构
- 库 : database / schema
- 表 : tables
列(字段): 列名,列的定义(数据类型,约束等)
行: 记录
五、mysql 对象的物理存储结构
库 ----> 目录
表 ----> 两个文件
例如:t1表
-rw-r----- 1 mysql mysql 8556 Mar 30 11:58 t1.frm
-rw-r----- 1 mysql mysql 98304 Mar 30 11:58 t1.ibd
t1.frm -----> 存储列的定义信息
t1.ibd -----> 存储数据行,索引
六、段、区、页
idb文件又被称之为一个表段;区,就是连续的多个页;一个段会有多个区构成;页(16kb)是最小的分配单元。
形象对比:
mysql | 磁盘 |
---|---|
段 | 分区 |
区 | 文件系统 |
页 | block |