最贵网站建设,网页制作的目的和意义,网站效果图设计,公司是做小程序还是做网站数据字典#xff08;InnoDB Data Dictionary#xff09;
MySQL中#xff0c;数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容
InnoDB数据字典由内部系统表组成#xff0c;这些表包含用于查找表…数据字典InnoDB Data Dictionary
MySQL中数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容
InnoDB数据字典由内部系统表组成这些表包含用于查找表、索引和表字段等对象的元数据。元数据物理上位于InnoDB系统表空间中。在MySQL8.0之前由于历史原因数据字典元数据在一定 程度上与InnoDB表元数据文件.frm文件中存储的信息重叠 注: MySQL8.0版本以后 将所有原先存放于数据字典文件中的信息全部存放到数据库系统表中即将之前版本的 .frm,.opt等文件都移除了不再通过文件的方式存储数据字典信息
双写缓冲区 ( Doublewrite Buffer Files) 什么是写失效 ( 部分页失效 ) InnoDB的页和操作系统的页大小不一致InnoDB页大小一般为16K操作系统页大小为4KInnoDB的页写入到磁盘时一个页需要分4次写 如果存储引擎正在写入页的数据到磁盘时发生了宕机可能出现页只写了一部分的情况比如只写了4K就宕机了这种情况叫做部分写失效partial page write可能会导致数据丢失 双写缓冲区 Doublewrite Buffer 为了解决写失效问题InnoDB实现了double write buffer Files, 它位于系统表空间是一个存储区域 在Buffer Pool的page页刷新到磁盘真正的位置前会先将数据存在Doublewrite 缓冲区。这样在宕机重启时如果出现数据页损坏那么在应用redo log之前需要通过该页的副本来还原该页然后再进行redo log重做double write实现了InnoDB引擎数据页的可靠性 默认情况下启用双写缓冲区如果要禁用Doublewrite 缓冲区可以将 innodb_doublewrite 设置为0 数据双写流程 step1当进行缓冲池中的脏页刷新到磁盘的操作时,并不会直接写磁盘,每次脏页刷新必须要先写double writestep2通过memcpy函数将脏页复制到内存中的double write bufferstep3: double write buffer再分两次、每次1MB, 顺序写入共享表空间的物理磁盘上, 第一次写step4: 在完成double write页的写入后再将double wirite buffer中的页写入各个表的独立表空间文件中(数据文件 .ibd), 第二次写 为什么写两次 ? 为啥写两次刷一次数据文件保存数据不就可以了为什么还要写共享表空间? 其实是因为共享表空间是在ibdbata文件中划出2M连续的空间专门给double write刷脏页用的, 由于在这个过程中double write页的存储是连续的因此写入磁盘为顺序写性能很高完成double write后再将脏页写入实际的各个表空间文件这时写入就是离散的了 Change Buffer 系统表空间中的change buffer是内存缓冲池中change buffer的备份也就是说被持久化到了系统表空间中。在崩溃恢复的时候会从系统表空间的change buffer中读取信息到buffer pool