MySQL 初探 | 青训营笔记

22 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 8 天

零、序言

本文记录和整理了本人在字节青训营中学习的一些所得所想,用于本人回顾和梳理相关知识点,也欢迎大家参考,一同学习。如果发现有问题或者错误,可以在下方留言或者私信我(^-^

一、课程总结

image.png

一、RDBMS的关键技术

SQL 执行流程

在SQL执行过程中,需要经历SQL引擎、存储引擎、以及事务引擎等模块。而其中SQL引擎又分为Parser、Optimizer、Executor几个部分。

image.png

SQL 引擎

SQL引擎包括了:

  • Paser:经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。
  • Optimizer:根据Parser产生的语法树,根据规则或者代价产生执行计划树。
  • Executor:根据计划树进行执行,常见的执行方式是火山模型。

存储引擎

存储引擎负责了数据的底层存储、管理和访问工作。各大RDBMS存储引擎的设计都有不少的差异,这里选择MySQL的InnoDB存储引擎来向大家做一个介绍:

  • Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销。
  • Page:数据存储的最基本单位,一般为16KB。
  • B+u Tree:InnoDB中最常用的索引结构。

事务引擎

事务引擎实现了数据库的ACID能力,这里还是以MySQL的InnoDB为例来介绍数据库内部是通过哪些技术来实现ACID:

  • Atomicity:InnoDB中通过undo日志实现了数据库的原子性,通过Undo Log,数据库可以回滚到事务开始的状态;
  • Isolation:通过Undo Log实现MVCC(多版本并发控制),降低读写冲突。
  • Durability:通过Redo Log(一种WAL实现方式)来保证事务在提交后一定能持久化到磁盘中。
  • Consistency:一致性本质上是一种业务层的限制。

二、课后作业

WAL 日志到底是如何保证数据的持久化,宕机后数据不丢失的?相比于其他方案,WAL 日志都有什么优势?

除了 Undo Log 之外,是否还有其他方案可以实现 MVCC?

基于代价的优化器一般需要考虑哪些代价?

执行器的执行模型,除了本课中提到的火山模型是否还有其他模型?相比于火山模型有什么优劣势?

InnoDB 的 B+ Tree 是怎么实现的?

InnoDB 的 buffer pool 是怎么实现页面管理和淘汰的?