MySQL物理存储结构 (段 区 页)
磁盘结构
盘片
扇区
柱面 \ 磁头(来回摆动, )
详细块级区分
- 一个扇区为 512字节(B)
- 一个block为 4KB(连续的8个扇区)
- 一个页为 16KB(连续的4block)
- 一个区(蔟)为 1MB(连续的64个页)
- 一个表就是一个段, 可以有1个或者多个区构成
分配空间是连续的分配一段一段的(顺序io)
OS kernel 读取磁盘数据
文件系统 ext4 xfs
存储方式
- 物理存储结构
- l
- 内存存储结构
- 每个成功男人背后都有一个为他默默付出的女人,而对于MySQL来说,这个“女人”就是InnoDB存储引擎。
- 缓冲池
缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。
速度快,那为啥不把所有数据都放到缓冲池里?
凡事都具备两面性,抛开数据易失性不说,访问快速的反面是存储容量小:
(1)缓存访问快,但容量小,数据库存储了200G数据,缓存容量可能只有64G;
(2)内存访问快,但容量小,买一台笔记本磁盘有2T,内存可能只有16G;
因此,只能把“最热”的数据放到“最近”的地方,以“最大限度”的降低磁盘访问。 - 数据页和索引页
Page是Innodb存储的最基本结构,也是Innodb磁盘管理的最小单位,与数据库相关的所有内容都存储在Page结构里。Page分为几种类型,数据页和索引页就是其中最为重要的两种类型。 - 两次写(Double Write)
如果操作系统在将页写入磁盘的过程中发生了崩溃,在恢复过程中,InnoDB存储引擎可以从共享表空间中的doublewrite中找到该页的一个副本,将其复制到表空间文件中,再应用重做日志。 - 重做日志(Redo Log Buffer)
事物讲
事务
当多个用户访问同一数据时,一个用户在更改数据的过程中可能有其它用户同时发起更改请求,为保证数据的一致性状态,MySQL 引入了事务。
- 什么是事物
- 事务ACID标准特性介绍
- 事务生命周期管理
- 自动提交功能
- 应用场景
- autocommit = 1 无需再用begin 和 commit
- 隐式事务控制
- redo
每一次落16KB 在高并发情况下代价比较高
变化日志 只记录 变化
WAL优先写原则
redo log file,但是还没有fsync,这时候是处于黄色的位置,处于系统缓存。调用fsync,真正写入磁盘。
- 发生crash情况
CKPT:为了保证数据一致性, 立即落盘保证LSN版本号一致