[MySQL 面试题]-内部技术架构 55-56 MySQL 8.0 自带存储引擎及作用

115 阅读3分钟

image.png

55 MySQL 8.0 自带存储引擎及作用

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

56 MySQL 存储引擎架构了解吗?

主要分为内存结构和磁盘结构两大部分。

dev.mysql.com/doc/refman/…

dev.mysql.com/doc/refman/…

image.png

InnoDB 架构总揽

innoDB 存储引擎采用模块化设计,主要分为两大部份:

  1. 内存结构(In-Memory Structures)
  2. 磁盘结构(On-Disk Structures)

这两部份协同工作,确保数据的高性能处理与持久性存储

In-Memory Structures

内存结构主要用于提升数据访问速度和处理效率。

  1. 缓冲池(Buffer Pool)

    • 缓冲池缓存了磁盘上的数据页(包括数据和索引),以减少磁盘I/O操作。
    • 通过配置参数 innodb_buffer_pool_size 控制其大小,合理设置有助于提升数据库性能。
  2. 自适应哈希索引(Adaptive Hash Index)

    • 检测到某些 B-Tree 索引频繁访问时,InnoDB会自动在内存中创建哈希索引,加速数据检索。
    • 此机制无需动手干预,完全由InnoDB自动管理。
  3. 变更缓冲区(Change Buffer)

    • 用于缓存对非非唯一二级索引页的插入、更新和删除操作,延迟磁盘写入,优化批量操作性能。
    • 适用于写密集型应用场景。
  4. 日志缓冲区(Log Buffer)

    • 暂存事务日志信息(Redo log),在事务提交前写入磁盘,确保事务的持久性。
    • 通过参数 innodb_log_buffer_size 配置其大小.

磁盘结构(On-Disk Structures)

磁盘结构负责数据的持久化存储。

  1. 表空间(Tablespaces)

    • InnoDB 支持多种表空间类型:系统表空间(System Tablespace)、每表表空间(File-Per-Table Tablespace)和通用表空间(General Tablespace)
    • 表空间用于存储表数据和索引、支持灵活的存储管理。
  2. 重做日志(Reao Logs)

    • 记录事务对数据的修改操作,用于在系统崩溃后进行数据恢复。
    • MySQL 8.0 引入了动态重做日志功能,允许在运行时调整重做日志的大小,无需重启数据库。
  3. 双写缓冲区(Doublewrite Buffer)

    • 在将数据页写入磁盘前,先写入双写缓冲区,确保在写入过程中即使发生故障也能保持数据一致性。
  4. Undo 表空间(Undo Tablespaces)

    • 存储事务的撤销信息,支持事务回滚和多版本并发控制(MVCC)。
    • Undo 信息也用于构建一致性读视图,确保读取操作的隔离性。

事务与多版本并发控制(MVCC)

InnoDB 实现了完整的 ACID 事务特性,支持:

  • 原子性(Atomicity) :确保事务中的所有操作要么全部完成,要么全部不做。
  • 一致性(Consistency) :事务使数据库从一个一致性状态转变到另一个一致性状态。
  • 隔离性(Isolation) :通过 MVCC 和锁机制,支持不同级别的事务隔离。
  • 持久性(Durability) :事务提交后,其结果永久保存在数据库中,即使系统崩溃也不会丢失。

MVCC 通过维护数据的多个版本,使得读取操作无需加锁,提高了并发性能。