文章目录
- 架构篇
- 逻辑架构
- SQL层
- 存储引擎层
- 分类
- 区别
- 执行流程
- 物理结构
- 日志文件
- 数据文件
架构篇
- MySQL要点:介绍安装,sql语句,架构,索引,锁与事务,性能分析,性能优化,集群
逻辑架构
- 客户端–>sql层–>可插拔式存储引擎层–>文件系统
- 需求–>处理sql–>操作文件系统
SQL层
- 管理工具
- 连接池
- SQL接口:接收SQL的DDL和DML
- 解析器
- 优化器:mysql优化sql语句
- 缓存
存储引擎层
分类
- MYISAM
- 5.5版本之前的默认存储引擎
- 不支持事务和行锁(适合读)
- InnoDB
- 5.5以后(包含)的默认存储引擎
- 支持事务和行级别的锁
- 支持外键
- Memory
- 内存引擎
- 保存在内存中
区别
InnoDB | MYISAM | |
存储文件 | .frm表定义文件 .ibd数据和索引文件 | .frm表定义文件 .myd数据文件 .myi索引文件 |
锁 | 表锁,行锁 | 表锁 |
事务 | 支持(读写) | 不支持(读多) |
count | 扫表计数 | 有专门存储引擎的地方 (空间换时间),where也扫表 |
外键 | 支持 | 不支持 |
数据结构 | B+Tree | B+Tree |
执行流程
物理结构
日志文件
- 错误日志:默认是开启的,而且从5.5.7以后无法关闭错误日志
- 二进制日志:binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息。如果是DDL语句,则直接记录到
binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。 生产中开启(数据备份、恢复、主从) - 通用查询日志:生产中不开启
- 慢查询日志:默认是关闭的,SQL调优 定位慢的 select
#开启慢查询日志
slow_query_log=ON
#慢查询的阈值
long_query_time=3
#日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,
但不是绝对路径名,文件则写入数据目录。
slow_query_log_file=file_name
- 重做日志
- 回滚日志
- 中继日志
- 看日志开启情况:
- show variables like ‘log_%’;
数据文件
- 查看数据文件位置
- SHOW VARIABLES LIKE ‘%datadir%’;
- 日志文件:顺序写入磁盘,一次寻找磁道,快
- 数据文件:随机写入磁盘,多次寻找磁道,慢
- 数据写入为甚随机写入:数据有删除,会产生多余空间,最后都是通过磁盘整理操作整理空间
- 磁盘数据落盘:利用日志文件提升IO的性能
- 先将数据文件写入到日志文件中,因为快,再集中将日志文件写入到数据文件中.