MySQL基础复习
文章目录
一、MySQL架构
1. 并发控制(服务器+存储引擎)
- 共享锁和排他锁(读写锁)
锁粒度:
- 表锁:服务器会为ALTER TABLE这样的语句加表锁
- 行级锁:只在存储引擎实现
事务的ACID:
- 原子性:一个事务必须被视为不可分割的最小单元
- 一致性:数据库总是从一个一致的状态转到另一个一致的状态
- 隔离性:事务在最终提交之前对其他事务不可见
- 持久性:一旦事务提交,就会永久保存到数据库中
隔离级别:
- 未提交读:事务可以读未提交的数据
- 已提交读:满足隔离性,不能重复查询
- 可重复读:没有解决幻读(where读取范围内记录,如果另一个事务向范围内加入了记录,则产生幻行)
- 串行化:强制事务串行执行的
死锁:
- 死锁超时放弃
- InnoDB:将持有最少行级排他锁的事务回滚
显式锁:
- Lock in share mode
- lock for update
- ps:不满足SQL规范,应该少量使用
InnoDB的MVCC(多版本并发控制):
- 在每行记录后面增加两列,一个保存行的创建时间,一个保存过期时间
- SELECT:版本小于当前事务版本+删除版本要么未定义,要么大于事务版本号
- UPDATE:插入记录保存当前版本号为创建时间+设置当前版本号为原有列的删除时间
2. 存储引擎
InnoDB存储引擎
- 概览:
- 数据存储在表空间
- 采用MVCC支持高并发
- 间隙锁(锁定查询涉及的行和索引中的间隙),防止幻读
- 采用聚簇索引
- 自适应哈希索引加速读操作
- 插入缓冲区加速写
- 支持热备份
MyISAM存储引擎
特性:
- 表级锁
- 支持repair操作
- 支持全文索引
- 延迟更新索引键(
DELAY_KEY_WRITE
)
使用场景:
- 不在乎并发和数据丢失,不需要事务
- 尤其在乎空间大小
- 支持地理空间搜索
二、MySQL性能测试
1. 常见指标
- 吞吐量:单位时间内事务处理数量(常见指标TPS)
- 响应时间或延迟
- 并发性:同时工作中的线程数和连接数
- 可扩展性
2. 慢查询日志:开销最低,精度最高
- 使用pt-query-digest工具输出报告,找到执行最慢的语句
剖析单条查询:
- show profile
- show status
分析是否是服务器的问题:
- show global status
- show processlist
三、 MySQL高级特性
1. 视图
- 视图是虚拟表
- 不能对视图创建触发器,也不能DROP TABLE