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

相关推荐
漫步向前2 分钟前
28.mysql读写分离
mysql
破 风1 小时前
Docker启动mysql容器时找不到 mysqlx.sock 和 mysqld.sock
mysql·docker·容器
Live000002 小时前
Next.js 结合 MySQL 数据库全站开发教程
前端·mysql·next.js
掘了2 小时前
实习 / 春秋招|必知必会的 ACM 模式输入输出与构造
c++·后端·面试
测试界茜茜2 小时前
16:00开始面试,16:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
书唐瑞2 小时前
使用 binlog2sql 闪回 MySQL8 数据
mysql·python3·mysql8·binlog2sql·闪回
爱上大树的小猪2 小时前
【前端基础】viewport 元标签的详细参数解析与实战指南
前端·css·面试
神仙别闹3 小时前
基于Java(JSP)+MySQL实现深度学习的音乐推荐系统
java·深度学习·mysql
川石教育3 小时前
软件测试之接口测试常见面试题
面试·软件测试面试题·接口测试面试题·接口测试题库
程序猿chen3 小时前
量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体终局篇)
前端·vue.js·git·安全·面试·前端框架·跳槽