百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

InnoDB存储结构之磁盘结构(磁盘数据结构)

nanshan 2024-10-20 07:34 12 浏览 0 评论


InnoDB磁盘主要包含Tablespaces、InnoDB Data Dictinary、Doublewrite Buffer、Redo Log和Undo Log。

Tablespaces(表空间)

用于存储表结构和数据。表空间又分为系统表空间、独立表空间、通用表空间、临时表空间、Undo表空间等多种类型;

    • The System Tablespace(系统表空间)
      • 包含InnoDB数据字典、Doublewrite Buffer、Change Buffer、Undo Logs的存储区域。
      • 系统表空间也默认包含任何用户在系统表空间创建的表数据和索引数据。
      • 系统表空间是一个共享的表空间,因为它是被多个表共享的。
      • 系统表空间的数据文件通过参数innodb_data_file_path控制,默认值是ibdata1:12M:autoextend(文件名为ibdata1、12M、自动扩展)。
    • File-Per-Tablespacee(独立表空间)
      • 默认开启,独立表空间是一个单表空间,该表创建于自己的数据文件中,而非创建于系统表空间中。当innodb_fle_per_table选项开启时,表将被创建于表空间中。否则,innodb将被创建于系统表空间中。
      • 每个表文件空间由一个.ibd数据文件代表,该文件默认被创建于数据库目录中。
      • 表空间的标文件支持动态(dynamic)和压缩(commpressed)行模式。
    • General Tablesapces(通用表空间)
      • 通用表空间为通过create tablespace语句创建的共享表空间。
      • 通用表空间可以创建于mysql数据库目录外的其他表空间,其可以容纳多张表,且支持所有的行格式。
    • Undo Tablespaces(撤销表空间)
      • 撤销表空间由一个或多个包含Undo日志文件组成。
      • 在MySQL 5.7版本之前Undo占用的是System Tablespaces共享区,从5.7开始将Undo从System Tablespaces分离出来。
      • InnoDB使用的是Undo表空间由innodb_undo_tablespaces配置选项控制,默认为0;
      • 参数值为0表示使用系统表空间ibdata1;大于0表示使用Undo表空间undo_001、undo_002等。
    • Temporary Tablespaces(临时表空间)
      • 分为Session Temporary Tablespaces和Global Temporary Tablespace两种。
        • Session Temporary Tablespaces存储的是用户创建的临时表和存盘内部的临时表
        • Global Temporary Tablespace存储用户临时表的回滚段(rollback segments)
      • MySQL服务器正常关闭或异常终止时,临时表空间将被移除,每次启动时会被重新创建。

数据字典(InnoDB Data Dictionary)

    • InnoDB数据字典由内部系统表组成,这些表包含用于查找表、索引和表字段等对象的元数据。
    • 元数据物理上位于InnoDB系统表空间上中。

双写缓冲区(Doublewrite Buffer)

    • 位于系统表空间,是一个存储区域。
    • 在Buffeer Pool的Page页刷新到磁盘真正的位置前,会先将数据存在Doublewrite Buffer。
    • 如果在Page页写入过程中出现操作系统、存储子系统或mysqlid进行崩溃,InnoDB可以在崩溃恢复期间从Doublewrite Buffer中找到Page页的一个备份。
    • 在大多数情况下,默认开启Doublewrite Buffer,如果要禁用Doublewrite Buffer,可以将innodb_doublewrite设置为0。
    • 使用Doublewrite Buffer时建议将innodb_flush_method设置为O_DIRECT
      • innodb_flush_method这个参数控制着InnoDB数据文件及Redo Log的打开及刷新模式。有三个值:fdatasync(默认)、O_DSYNC、O_DIRECT。设置O_DIRECT表示数据写入操作会通知操作系统不要缓存数据,也不要预读,直接从InnoDB Buffer写到磁盘文件;默认的fdatasync是先写入操作系统缓存,然后再调用fsync()函数去异步刷新数据文件与Redo Log的缓存信息。

重做日志(Redo Log)

    • Redo Log是一种基于磁盘的数据结构,用于在崩溃恢复期间更正不完整事务写入的数据。
    • MySQL以循环方式写入Redo Log,记录InnoDB中所有对Buffer Pool修改的日志。
    • 当出现实例故障,导致数据未能更新到数据文件,则数据库重启时需要Redo,重新把数据更新到数据文件。
    • 读写事务在执行的过程中,都会不断的产生Redo Log。
    • 默认情况下,Redo Log在磁盘上由两个名为ib_logfile0和ib_logfile1的文件物理名称。

撤销日志(Undo Log)

    • Undo Log是在事务开始之前保存的被修改数据的备份,用于意外情况时回滚事务。
    • Undo Log属于逻辑日志,根据每行记录进行级联。
    • Undo Log存在于系统表空间、撤销表空间和临时表空间中。

新版本结构演变

  • MySQL 5.7版本
    • 将Undo日志表空间从共享表空间ibdata文件中分离出来,可以在安装MySQL时由用户自行指定文件大小和数量。
    • 增加了Temporary临时表空间,里面存储着临时表或临时查询结果集的数据。
    • Buffer Pool大小可以动态修改,无需重启数据库实例
  • MySQL 8.0版本
    • 将InnoDB表的数据字典和Undo都从共享表空间ibdata中彻底分离出来,之前版本需要ibdata中数据字段与独立表空间ibd文件中数据字典一致。
    • Temporary临时表空间可以配置多个物理文件,而且均为InnoDB存储引擎并能创建索引,加快了处理的速度。
    • 用户可以设置一些表空间,每个表空间对应多个物理文件,每个表空间可以给多个表使用,但一个表只能存储在一个表空间中。
    • 将Doublewrite Buffer从共享表空间ibdata中分离出来

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

Mysql5.7 出现大量 unauthenticated user

线上环境mysql5.7突然出现大量unauthenticateduser,进mysql,showprocesslist;解决办法有:在/etc/hosts中添加客户端ip,如192.16...

MySQL 在 Windows 系统下的安装(mysql安装教程windows)

更多技术文章MySQL在Windows系统下的安装1.下载mysql和Framework链接链接:百度网盘请输入提取码提取码:6w3p双击mysql-installer-communit...

MySql5.7.21.zip绿色版安装(mysql数据库绿色版安装)

1、去网上下载满足系统要求的版本(mysql-5.7.21-winx64.zip)2、直接解压3、mysql的初始化(1)以管理员身份运行cmd,在mysql中的bin目录下shift+右键-在...

MySQL(8.0)中文全文检索 (亲测有效)

在一堆文字中找到含有关键字的应用。当然也可以用以下语句实现:SELECT*FROM<表名>WHERE<字段名>like‘%ABC%’但是它的效率太低,是全盘扫描。...

新手教程,Linux系统下MySQL的安装

看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...

麒麟服务器操作系统安装 MySQL 8 实战指南

原文连接:「链接」Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装MySQL8的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL作为主流开源数据库之一,被广泛应用于各种业务...

用Python玩转MySQL的全攻略,从环境搭建到项目实战全解析

这是一篇关于“MySQL数据库入门实战-Python版”的教程,结合了案例实战分析,帮助初学者快速掌握如何使用Python操作MySQL数据库。一、环境准备1.安装Python访问Pytho...

安装MySQL(中标麒麟 安装mysql)

安装MySQL注意:一定要用root用户操作如下步骤;先卸载MySQL再安装1.安装包准备(1)查看MySQL是否安装rpm-qa|grepmysql(2)如果安装了MySQL,就先卸载rpm-...

Mysql最全笔记,快速入门,干货满满,爆肝

目录一、MySQL的重要性二、MySQL介绍三、软件的服务架构四、MySQL的安装五、SQL语句六、数据库相关(DDL)七、表相关八、DML相关(表中数据)九、DQL(重点)十、数据完...

MAC电脑安装MySQL操作步骤(mac安装mysqldb)

1、在官网下载MySQL:https://dev.mysql.com/downloads/mysql/根据自己的macOS版本,选择适配的MySQL版本根据自己需求选择相应的安装包,我这里选择macO...

mysql主从(mysql主从切换)

1、本章面试题什么是mysql主从,主从有什么好处什么是读写分离,有什么好处,使用mycat如何实现2、知识点2.1、课程回顾dubboORM->MVC->RPC->SOApro...

【linux学习】以MySQL为例,带你了解数据库

做运维的小伙伴在日常工作中难免需要接触到数据库,不管是MySQL,mariadb,达梦还是瀚高等其实命令都差不多,下面我就以MySQL为例带大家一起来了解下数据库。有兴趣的小伙伴不妨评论区一起交流下...

玩玩WordPress - 环境简介(0)(玩玩网络科技有限公司)

简介提到开源博客系统,一般都会直接想到WordPress!WordPress是使用PHP开发的,数据库使用的是MySQL,一般会在Linux上运行,Nginx作为前端。这时候就需要有一套LNMP(Li...

服务器常用端口都有哪些?(服务器端使用的端口号范围)

下面为大家介绍一下,服务器常用的一些默认端口,以及他们的作用:  21:FTP服务所开放的端口,用于上传、下载文件。  22:SSH端口,用于通过命令行模式远程连接Linux服务器或vps。  23:...

取消回复欢迎 发表评论: