高性能 MySQL 笔记
2017-11-14 09:36
260 查看
高性能 MySQL 笔记
MySQL架构和历史
MySQL逻辑架构
第一层处理网络连接等, 比如链接认证授权等
第二层是 MySQL 的核心, 用来解析优化 SQL 语句, 设计缓存, 以及各种函数的实现, 包括存储过程, 触发器, 视图等
第三层包括存储引擎, 负责具体数据的存取, 服务器通过 API 和存储引擎通信, 存储引擎只执行来自上层的请求
每个客户端连接都在服务器进程中有一个线程, 服务器负责缓存线程, 不需要手动管理
服务器处理连接流程
12345678910 | graph LRstart[客户端连接]auth[检查用户名密码]access[检查是否有对应资源的处理权限]query[执行SQL 操作]start-->authauth-->accessaccess-->query |
并发控制
MySQL 会在两个层面做并发控制: 服务器层和存储引擎层读写锁
读锁(共享锁)是共享的, 互相不阻塞
写锁(排他锁)是排他的, 给定时间内, 只有一个用户能写入
表锁在服务器层实现, 行锁在存储引擎层实现
事务
数据库事务具有, 原子性, 一致性, 隔离性和持久性, 简称 ACID使用事务会增加额外的开销
隔离级别
READ UNCOMMITTED 未提交读, 就是在A事务还没有提交的时候, B操作可以读取 A 修改的数据, 即脏读, 一般不使用这种隔离方式
READ COMMITTED 提交读, 事务在提交之前, 对其他的事务不可见, 即只对自己事务内部的数据有影响, 也叫不可重复读
REPEATEABLE READ 可重复读, A 事务本身对数据的修改对 A 事务后边的语句也不起作用, 所有的 SQL 操作的数据都来自数据库, 这是 MySQL 默认的事务隔离级别
SERIALIZABLE 可串行化, 这种会在事务操作的每一行记录上都加一个锁, 会严重降低性能, 但是数据一致性比较高
事务日志是顺序 I/O, 日志采用追加的方式
MySQL 的每个查询都被当成一个事务执行
Innodb 的 MVCC (多版本并发控制) 的实现方式 \
只工作在 REPEATEABLE 和 READ COMMITED 两种隔离级别下
为每一行记录增加两个字段, 一个保存行的创建时间, 另一个保存行的过期/删除时间, 具体存储的是一个版本号, select 的时候会首先读创建版本号小于或等于当前事务版本号, 并且删除版本号为空或者大于当前事务的版本号, inssert 更新创建版本号, delete 会更新删除版本号, update 更新创建版本号为当前系统版本号, 更新删除版本号为之前的创建版本号
存储引擎
InnoDB支持行级锁
支持事务
全表使用 B+ tree 实现
数据只存在叶子节点上
MyISAM
不支持行级锁, 只支持表锁
数据文件和索引文件分开
不支持事务
可以通过压缩表技术提高性能
索引使用 B+ tree 实现
相关文章推荐
- 高性能MySQL笔记-第5章Indexing for High Performance-002Hash indexes
- 高性能MySQL笔记 第6章 查询性能优化
- 高性能MySQL第六章笔记
- 高性能Mysql学习笔记之第一章
- 高性能MySQL笔记-第5章Indexing for High Performance-003索引的作用
- MySql高性能笔记 - (一)Mysql基础知识
- 高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引
- 高性能Mysql笔记 — 优化
- 高性能MySql学习笔记——多版本并发控制算法
- 高性能MySQL笔记之基本概念
- 高性能mysql笔记---schema与数据结构[-3-]
- 高性能MySQL笔记之索引
- 高性能Mysql笔记 (5)---索引优化
- 高性能MySQL第一章笔记
- 高性能MySql学习笔记——锁、事务、隔离级别
- 高性能Mysql笔记 (6)---查询优化
- 高性能MySql学习笔记——锁、事务、隔离级别
- 高性能mysql笔记(七)高性能的索引策略
- 高性能Mysql学习笔记-查询性能优化
- MySQL 高性能优化笔记(一)