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

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/...

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 通过维护数据的多个版本,使得读取操作无需加锁,提高了并发性能。

相关推荐
Musennn3 分钟前
MySQL刷题相关简单语法集合
数据库·mysql
逝水如流年轻往返染尘1 小时前
MySQL表的增删查改
mysql
laowangpython1 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
万能程序员-传康Kk4 小时前
【Python+flask+mysql】网易云数据可视化分析(全网首发)
python·mysql·信息可视化·数据分析·flask·可视化·网易云
默心5 小时前
运维工程师面试经验分享
运维·经验分享·面试
不剪发的Tony老师5 小时前
数据库行业竞争加剧,MySQL 9.3.0 企业版开始支持个人下载
数据库·mysql
悟能不能悟6 小时前
mysql的not exists走索引吗
数据库·mysql
fengye2071616 小时前
板凳-------Mysql cookbook学习 (二)
学习·mysql·adb
朝新_7 小时前
【MySQL】第五弹——表的CRUD进阶(三)聚合查询(上)
mysql
MaCa .BaKa7 小时前
38-日语学习小程序
java·vue.js·spring boot·学习·mysql·小程序·maven