浅析Innodb架构

逻辑结构

在这里插入图片描述
在这里插入图片描述

  • 默认的表空间位置在/var/lib/mysql

架构

在这里插入图片描述

内存架构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • show variables like ‘%hash_index%’; 默认是关闭的。

在这里插入图片描述

在这里插入图片描述

  • 查看默认缓冲区大小
mysql> show  variables like '%log_buffer_size%';
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| innodb_log_buffer_size | 16777216 |
+------------------------+----------+
1 row in set (0.03 sec)

mysql> select 16777216 / 1024 / 1024 as 'MB';
+-------------+
| MB          |
+-------------+
| 16.00000000 |
+-------------+
  • 查看默认是指刷盘时机,日志在每次提交时写入并刷新磁盘。
mysql> show  variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+

在这里插入图片描述

磁盘结构

在这里插入图片描述

  • 查看系统表空间位置,ibdata1表示的就是系统表空间的位置
mysql> show  variables like '%innodb_data_file_path%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+

在这里插入图片描述

  • 查看表的数据保存空间,默认是打开的。
mysql> show  variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

后台线程

在这里插入图片描述

  • show engine innodb status;

在这里插入图片描述

### InnoDB 架构详解 #### 表空间 (Tablespace) InnoDB 的表空间是其逻辑结构中的最高层次。如果用户启用了 `innodb_file_per_table` 参数(在 MySQL 8.0 版本中,默认启用),每个表的数据会存储在一个独立的 `.ibd` 文件中,而不是统一存放在共享表空间文件 `ibdata1` 中[^4]。 #### 缓冲池 (Buffer Pool) 缓冲池是 InnoDB 实现高性能的关键组件之一。它是内存区域的一部分,用于缓存数据页和索引页,减少磁盘 I/O 操作。当查询或修改数据时,InnoDB 首先会在缓冲池中查找所需的数据;如果没有命中,则从磁盘加载到缓冲池中。通过合理配置缓冲池大小,可以显著提升数据库性能[^3]。 #### 日志系统 (Redo Log 和 Undo Log) - **Redo Log**: Redo 日志记录了对数据页所做的物理更改,主要用于崩溃恢复。每次提交事务后,InnoDB 只需将 Redo 日志写入磁盘即可完成持久化操作,而不需要立即将数据页刷回磁盘。这种机制称为预写日志(Write-Ahead Logging, WAL)[^1]。 - **Undo Log**: Undo 日志保存了旧版本的数据,以便支持多版本并发控制(MVCC)。当读取数据时,可能需要访问历史版本的数据来实现一致性视图。此外,在事务回滚过程中也会用到 Undo 日志[^2]。 #### 锁机制 InnoDB 支持多种类型的锁,包括但不限于: - **行级锁**: 提供更高的并发能力,允许多个事务同时处理不同的行。 - **意向锁**: 一种元组级别的锁,表示某个事务打算获取某一行上的特定类型锁。 - **间隙锁**: 主要用于防止幻读现象的发生,锁定的是两个实际记录之间的“间隙”。 这些复杂的锁策略使得 InnoDB 能够很好地满足高并发环境下的需求。 #### 插件式架构与其他模块 除了上述主要组成部分之外,InnoDB 还具有插件式的架构设计,允许开发者扩展功能或者替换某些内置子系统。例如双写缓冲区、自适应哈希索引等都是可以通过参数调整甚至禁用的功能点。 ```sql -- 查看当前实例是否开启了 per table tablespaces 功能 SHOW VARIABLES LIKE 'innodb_file_per_table'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值