张家港质监站网址,上海做网站 公司有哪些,网站制作公司网站建设网站,wordpress 调取文章内容逻辑结构
InnoDB存储引擎逻辑结构如图所示#xff1a;
Tablespace#xff1a;表空间#xff0c;一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间#xff0c;用来存放表记录、索引等数据。
Segment#xff1a;段#xff0c;表空间中有多个段#xff0c…逻辑结构
InnoDB存储引擎逻辑结构如图所示
Tablespace表空间一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间用来存放表记录、索引等数据。
Segment段表空间中有多个段而每个段中将表空间中的记录、索引等数据分为数据段、索引段、回滚段来存储。其中索引段就存储在B树的非叶子结点数据段就存储在叶子结点上。段中又管理多个区Extent)。
Extent区表的单元结构每个区的大小为1M。默认情况下InnoDB存储引擎的页大小为16k那么每个区中就存储64个连续的页。
Page页是InnoDB存储引擎管理的最小单元每个页的大小默认为16KB。为了保证页的连续性InnoDB每次从磁盘申请4~5个区。页中存放的就是表空间的记录和索引。
Row行在InnoDB引擎中数据是按行进行存放的。 Trx id 和Roll pointer是表结构中隐藏的两个字段。 Trx id 事务id是用来存储最后一个操作的事务id。 Roll pointer回滚指针指向上一个版本记录在undo log的位置。多个版本被Roll pointer连接成一个版本链。这也是MVCC的原理。 InnoDB架构
MySQL5.5版本之后默认的存储引擎是InnoDBInnoDB的架构图如下 内存结构
内存结构如图 Buffer Pool缓冲池是主内存的一个区域用来缓存磁盘上记录操作频繁的实时数据。在进行增删改查操作时先查询缓冲池中是否有数据如果没有则需要从磁盘中加载到缓冲池再进行对应的操作。然后将这些脏页以一定的频率刷新到磁盘当中。 缓冲池以Page为单位底层采用链表来管理数据的。根据状态将缓冲池中的Page分为三种 free page 空闲页该页中没有存放任何数据。 clean page 被使用的页其中存放的数据是从磁盘加载过来的并未被修改。 dirty page 脏页该页中的数据被修改即该页中的数据是最新的和磁盘中的内容是不一致的。 Change Buffer更改缓冲区在执行DML语句时如果Buffer Pool中没有对应的数据页那么就将数据变更存储在Change Buffer中。之后读取这些数据时会将磁盘中的数据与Change Buffer中的变更记录合并加载到Buffer Pool中。
Changer Buffer有什么意义?
Change Buffer是针对非唯一的二级索引。二级索引是随机的如果多个修改操作直接通过磁盘IO操作由于其随机性就会造成大量的磁盘IO性能就会大打折扣。使用Change Buffer不会进行随机磁盘IO从而减少了损耗。
Adaptive Hash Index自适应哈希索引用于优化Buffer Pool数据的查询。InnoDB存储引擎会监控对表上各索引页的查询如果观察到hash索引可以提升速度就会自动建立索引。 自适应哈希索引无需人工干预由_MySQL自动执行。 可以通过 adaptive_hash_index参数进行控制,默认为ON代表是开启的。 Log Buffer日志缓冲区用来保存要写入磁盘中的log日志数据redo log、undo log默认大小为16MB,日志缓冲区的日志会定期刷新到磁盘中。如果需要更新、插入或删除多行的事务增加日志缓冲区的大小可以节省磁盘IO。 参数innodb_log_buffer_size缓冲区大小 Innodb_flush_log_at_trx_commit日志刷新到磁盘时机。 磁盘结构
磁盘结构如图 System Tablespace系统表空间是更改缓冲区的存储区域。如果系统中独立表空间以及通用表空间关闭的话系统表空间也会存储表的记录以及索引。 参数innodb_data_file_path File-Per-Table Tablespaces每个表的独立表空间。默认是开启的。 参数innodb_file_per_table General Tablespaces通用表空间需要手动进行创建。在创建表时可以为其指定表空间。
创建表空间语法
CREATE TABLESPACE XXXX ADDDATAFILE file_nameENGINGE engine_name;
指定表空间语法
CREATE TABLE XXX (...)TABLESPACE ts_name;
Undo Tablespaces撤销表空间MySQL实例在初始化时会自动创建两个默认的undo表空间初始大小16MB用于存储undo log日志。
Temporary Tablespaces临时表空间存储用户创建的临时表。
Doublewrite Buffer Files双写缓冲区innoDB引擎将数据页刷新到磁盘时先将数据页写入双写缓冲区文件中便于系统异常时恢复数据。
Redo Log重做日志用来实现事务的持久性。
后台线程
InnoDB存储引擎涉及到很多内存与磁盘之间的操作比如从脏页的刷新、磁盘文件的加载、日志的刷新等这些操作都是由后台线程完成的。 1.Master Thread核心后台线程负责调度其他线程还负责将缓冲池中的数据异步刷新到磁盘当中保持数据一致性还包括脏页的刷新、合并插入缓存、undo页的回收。
2.IO Thread在InnoDB存储引擎中大量使用了AIO来处理请求这样可以极大地提高数据库的性能而IO Thread主要负责这些IO请求的回调。
线程类型默认个数职责Read thread4负责读操作Write thread4负责写操作Log thread1负责将日志缓冲区刷新到磁盘Insert buffer thread1负责将写缓冲区内容刷新到磁盘
3.Purge Thread主要用于回收事务已经提交了的undo log在事务提交之后undo log可能不用了就用它来回收。
4.Page Cleaner Thread协助Master Thread刷新脏页到磁盘的线程它可以减轻 Master Thread 的工作压力减少阻塞。