InnoDB架构
内存架构
- Buffer Pool
主内存的一块区域 , InnoDB在表和索引数据被访问的时候缓存它 。 在专用服务器上 , 高达80%的物理内存通常分配给buffer pool 。 配置项:innodb_buffer_pool_size , 正常推荐设置50%-75%的系统内存
实现为page链表 , 缓存里很少的数据会使用LRU算法过时掉
- Change Buffer
当二级索引page不在buffer pool时 , 缓存对这些二级索引page的更改 。 对于buffer的更改 , 稍后当page被其他读操作加载进buffer pool的时候 , 会进行合并
- 在内存中 , change buffer占用部分的buffer pool 。 在磁盘上 , change buffer是系统表空间的一部分 , 当数据库服务器关闭的时候 , 索引得更改将在其中进行缓存
- Adaptive Hash Index
自适应Hash索引 , 使InnoDB在具有适当的工作负载和有足够内存的buffer pool组合的系统上 , 执行起来更像内存中的数据库 , 而不会牺牲事务特性和可靠性 。
根据观察到的搜索模式 , 使用索引key的前缀建立hash索引 。 hash索引是根据需要为经常需要访问的索引page构建的 。
如果一个表差不多可以整个放进主内存 , 那么hash索引通过启用任何元素的直接查找来加快查询 , 将索引值转换为一种指针 。
- Log Buffer
持有将要被写入磁盘上的日志文件的内存区域 。 log buffer的内容会定期刷写到磁盘 。 默认16MB 。 大的log buffer能让大的事务运行而不需要在事务提交前将redo log数据写到磁盘上 。 所以如果有事务更新、插入或者删除很多行 , 增大log buffer能减少磁盘IO
- 表 Tables
- 索引 Indexes
聚簇索引能加快查询 , 因为索引搜索能直接指向包含行数据的page 。 如果表很大 , 聚簇索引通常能够节省磁盘IO操作
聚簇索引之外的其他所有叫做二级索引 。 在innodb里 , 二级索引的每个记录都包含了行的主键列 , 以及为二级索引指定的列
如果主键key很长 , 二级索引也会使用更多的空间
InnoDB索引是B-Tree结构 , 空间索引是R-Tree结构 。 索引记录存储在B-Tree或R-Tree的叶子page上
- 表空间 Tablespaces
- system表空间
存储change buffer的区域 。 如果表创建在system表空间而不是file-per-table或general表空间 , 它也可能存储表和索引数据 。
它可以有一个或多个数据文件 , 默认是单个系统表空间数据文件 , 名称为ibdata1
- File-Per-Table表空间
包含单个InnoDB表的数据和索引 , 存储在文件系统的单个数据文件里
文件名为:table_name.ibd
- General表空间
通过使用CREATE TABLESPACE语法创建的共享InnoDB表空间
和system表空间类似 , 能够存储多个表的数据的共享表空间
相对于file-per-table表空间 , 通用表空间有潜在的内存优势 。 服务器会在表空间的生命周期内将表空间的元数据保留在内存内 , 多个表在数量更少的通用表空间的占用表空间元数据的内存会更少
- Undo表空间
包含undo日志 , 它是记录的集合 , 包含了怎么撤销事务对聚簇索引最新的修改的信息
Undo日志默认存储在system表空间 , 但也可以存储在一个或多个undo表空间里
- Temporary表空间
包含Session临时表空间 , 一个全局临时表空间
session临时表空间存储着用户创建的临时表 , 以及当innodb配置为磁盘内部临时表存储引擎时优化器创建的内部临时表(从MYSQL8.0.16起磁盘内部临时表使用的存储引擎永远是InnoDB)- 微信|遇到不认识的字,用微信1秒就能读出来,操作简单,比字典还方便
- 诈骗|女子遇诈骗反赚骗子1千多 认识炒股专家被坑惨:官方提醒不要想暴富
- 黑科技与建筑的无缝结合,带你回溯千年历史
- 微信|带你了解微信新版本的几个实用功能
- 对于知网论文查重系统带你们来深刻探索一下!
- 本文转自:新华网第十届中国(绵阳)科技城国际科技博览会于11月16日至19日在四川绵阳举...|记者带你体验科博会上的“新”“奇”“特”
- 欧盟|苹果手中的“灰色”出货神器,带你了解卡贴机黑解背后的底层逻辑
- 华硕|11月17日登场!一文带你提前看完我10系列亮点,屏幕太绝
- “智慧水电”应用上线啦!一篇文章带你一探究竟…
- 显示器|无愧经典,从不落伍的CD机带你重拾听音的纯粹