这是我参与[第五届青训营]笔记创作活动的第12天 本文主要想对课堂上学的一些内容进行总结整理。今天学习的是关系型数据的核心技术中的存储引擎及其分析。
一、本堂课重点内容
- 存储引擎
二、详细知识点介绍
存储引擎
概况
MySQL中使用的存储引擎是innoDB
innoDB分为两部分
In-Memory:
- Buffer Pool(做为数据缓存的一部分)
- Change Buffer
- Adaptive Hash Index
- Log Buffer(日志先写入Buffer再写入磁盘)
On-Disk:
- System Tablespace(ibdata1)(数据库使用时需存元数据,元信息(表名、列名、用户及权限等)一般存在系统表中)
- General Tablespaces(xxx.ibu)(存普通数据的普通表)
- Undo Tablespaces(xxx.ibu)(存Undo日志)
- Temporary Tablespaces(xxx.ibt)(存)
- Redo Log(ib_logfileN)
内存态做一部分数据缓存,因为访问内存和磁盘代价不同。磁盘一部分用于存储元信息,用户的真实数据和事务所用的日志等。
Buffer Pool
Buffer Pool一般被分为多个instance(16k小内存空间),可以降低页面访问的冲突。
Buffer Pool管理:
Hash Map,LRU(磁盘一般要远大于内存,磁盘的数据量远大于内存能容纳的数据量。LRU算法保留最近最常使用的数据保留下来,把其余的内存释放。)
每个小内存空间(page)
- Page Header(120B)
- UserRecords
- Free Space
- Page Directory(列表)
- FIL Trailer(8B)
Header一般包含
- delete_mask:用于标识此条数据是否被删除。
- next_record:记录下一条数据的位置。
- record_type:表示当前记录的类型。
B+ Tree
B+Tree一般用于索引,是B Tree的扩展。在页面先通过二分查找快速定位对应的槽,再遍历(从根到叶)该槽中对应分组中的记录找到指定的记录。叶子节点间通过双向链表串联,不管是点查还是范围查都可以快速查询。