
55 MySQL 8.0 自带存储引擎及作用
存储引擎 | 主要作用与特点 |
---|---|
InnoDB | 默认引擎,支持事务,行级锁 、崩溃恢复、外键等、适合大多数OLTP场景 |
MyISAM | 不支持事务、只支持表级锁,读写性能高、适合只读或轻写场景。 |
memory | 数据存放在内存中,读写速度快,适合临时计算与会话缓存场景 |
csv | 表数据以CSV格式存在文件中,可与外部系统共享数据(兼容性强) |
archive | 适合存历史归档数据,仅支持Insert和select,压缩存储,节省空间 |
blackhole | 黑洞引擎,写入数据但不存储,常用于复制,中继或日志调试 |
federated | 访问远程MySQL实例的数据,适用于跨库查询(需手动启用) |
ndb(cluster) | MySQL Cluster 引擎,支持分布式、高可用、高并发、需要单独安装 |
56 MySQL 存储引擎架构了解吗?
主要分为内存结构和磁盘结构两大部分。

InnoDB 架构总揽
innoDB 存储引擎采用模块化设计,主要分为两大部份:
- 内存结构(In-Memory Structures)
- 磁盘结构(On-Disk Structures)
这两部份协同工作,确保数据的高性能处理与持久性存储
In-Memory Structures
内存结构主要用于提升数据访问速度和处理效率。
-
缓冲池(Buffer Pool)
- 缓冲池缓存了磁盘上的数据页(包括数据和索引),以减少磁盘I/O操作。
- 通过配置参数 innodb_buffer_pool_size 控制其大小,合理设置有助于提升数据库性能。
-
自适应哈希索引(Adaptive Hash Index)
- 检测到某些 B-Tree 索引频繁访问时,InnoDB会自动在内存中创建哈希索引,加速数据检索。
- 此机制无需动手干预,完全由InnoDB自动管理。
-
变更缓冲区(Change Buffer)
- 用于缓存对非非唯一二级索引页的插入、更新和删除操作,延迟磁盘写入,优化批量操作性能。
- 适用于写密集型应用场景。
-
日志缓冲区(Log Buffer)
- 暂存事务日志信息(Redo log),在事务提交前写入磁盘,确保事务的持久性。
- 通过参数 innodb_log_buffer_size 配置其大小.
磁盘结构(On-Disk Structures)
磁盘结构负责数据的持久化存储。
-
表空间(Tablespaces)
- InnoDB 支持多种表空间类型:系统表空间(System Tablespace)、每表表空间(File-Per-Table Tablespace)和通用表空间(General Tablespace)
- 表空间用于存储表数据和索引、支持灵活的存储管理。
-
重做日志(Reao Logs)
- 记录事务对数据的修改操作,用于在系统崩溃后进行数据恢复。
- MySQL 8.0 引入了动态重做日志功能,允许在运行时调整重做日志的大小,无需重启数据库。
-
双写缓冲区(Doublewrite Buffer)
- 在将数据页写入磁盘前,先写入双写缓冲区,确保在写入过程中即使发生故障也能保持数据一致性。
-
Undo 表空间(Undo Tablespaces)
- 存储事务的撤销信息,支持事务回滚和多版本并发控制(MVCC)。
- Undo 信息也用于构建一致性读视图,确保读取操作的隔离性。
事务与多版本并发控制(MVCC)
InnoDB 实现了完整的 ACID 事务特性,支持:
- 原子性(Atomicity) :确保事务中的所有操作要么全部完成,要么全部不做。
- 一致性(Consistency) :事务使数据库从一个一致性状态转变到另一个一致性状态。
- 隔离性(Isolation) :通过 MVCC 和锁机制,支持不同级别的事务隔离。
- 持久性(Durability) :事务提交后,其结果永久保存在数据库中,即使系统崩溃也不会丢失。
MVCC 通过维护数据的多个版本,使得读取操作无需加锁,提高了并发性能。