架构篇
- 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的性能
- 先将数据文件写入到日志文件中,因为快,再集中将日志文件写入到数据文件中.