数据查询流程
连接池
缓存
分析器
优化器
执行器
日志文件类型
/var/lib/mysql
error,warning log
Binlog :ddl 提交后记录,主从备份,数据备份,数据恢复
general log
slow query log
redo log:commit log
undo log:rollback log
relay log:主从
存储引擎的存储和提取
InnoDB
文件:.frm .idb .ibdata
索引和数据存储在一起,支持高并发、事务
MyIsam
文件:.frm .myd .myl
索引和数据不在一起
memory:内存
索引
mysql 集群
主从同步:主-》binlog+独立ID 从-》唯一ID,专门复制主服务器的数据
前提:1. 主记录binlog位置 2. 已有数据快照mysqldump导出,复制数据文件
从 -》zhuIP+权限+binlog文件名和位置
主从复制:延时-SQL Thread, IO Thread,网络延时,IO耗时
主从读写分离: 主 读写 从 数据安全备份
分表分库:垂直切分-》 按照业务模块切分到不同数据库
水平切分 -》 大表按行切分
锁
全局锁:database锁
表级锁:table锁,共享读,独占写。 加锁块,开销小
行级锁:Record Locks, Gap Locks, next-key locks
元数据锁:MDL
共享锁:读锁
排它锁:update,delete,insert
悲观锁:表级锁,元数据锁,意向锁
乐观锁:程序实现,version+timezone
死锁:间隙锁死锁,记录锁死锁。
避免交叉更新,保持事务的轻量,尽量使用主键,避免子查询,尽快提交事务,
性能分析和性能优化
表优化:使用中间表,大表拆表
索引优化:where 条件,组合索引(粒度从高到低),使用覆盖索引
limit 优化:count(*),count(1),count(cloume)
join 优化:关联字段建索引,字段类型一样
where 优化:使用 in, not exists, exists
事务与事务分析
DDl,DML,DCL
Dml 数据操纵语言,如select、update、delete,insert
Ddl 数据定义语言,如create table 、drop table 等等
Dcl 数据控制语言, 如 commit、 rollback、grant、 invoke等
A: all/no
C: status 一致
I: 锁+MVCC 用于数据库提供并发控制技术
D: 成功后写入磁盘
事务
Begin/start Transaction
commit;
Rollback
行锁分析
- 主键+RC:X锁
- 唯一索引+RC:X锁
- 唯一非索引+RC:X锁
- 无索引+RC: 全表锁
- 主键+RR: X锁
- 唯一索引+RR:X锁
- 唯一非索引+RR: X锁+GAP 两条记录之间的缝隙
- 无索引+RR : 全表锁+全表GAP
CheckPoint:
- 完全检查点:sharp
- 模糊检查点:master thread、flush lru list、async/sync、dirty page too much
磁盘文件
系统表空间:data dictionary, Double write,
用户表空间:数据+索引+undo
redo 日志文件和归档文件
B+ 树 叶子结点存储数据
B 树 主+叶子结点