【MySQL精通之路】InnoDB(6)-磁盘结构(3)-表空间

主博客:

【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客

上一篇:

【MySQL精通之路】Innodb-索引-CSDN博客

下一篇:

【MySQL精通之路】InnoDB-双写缓冲区-CSDN博客

目录

1 系统表空间

1.1 调整系统表空间的大小

1.1.1 增加

1.1.2 减小

1.1.3 为系统表空间使用原始磁盘分区

1.1.4 在Linux和Unix系统上分配原始磁盘分区

1.1.5 在Windows上分配原始磁盘分区

2 FPT表空间

2.1 配置

2.2 FPT表空间数据文件

2.3 FPT表空间优势

2.4 FPT表空间缺点

3 一般表空间

4 Undo表空间

5 临时表空间

6 服务器脱机时移动表空间文件

7 禁用表空间路径验证

8 优化Linux上的表空间分配

9 表空间AUTOEXTEND_SIZE配置


1 系统表空间

系统表空间是更改缓冲区的存储区域。

如果表是在系统表空间中创建的,而不是按文件表或通用表空间创建的,那么它也可能包含表和索引数据。

在以前的MySQL版本中,系统表空间包含InnoDB数据字典。

在MySQL 8.0中,InnoDB将元数据存储在MySQL数据字典中。

请参阅"数据字典"。

【MySQL精通之路】MySQL8.0官方文档-数据字典-CSDN博客

在以前的MySQL版本中,系统表空间也包含双写缓冲区存储区域。

从MySQL 8.0.20开始,此存储区域位于单独的双写文件中。

参见“双写缓冲区”。

【MySQL精通之路】InnoDB(6)-磁盘结构(4)-双写缓冲区-CSDN博客

系统表空间可以有一个或多个数据文件。默认情况下,在数据目录中创建一个名为ibdata1的系统表空间数据文件。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。有关配置信息,请参阅系统表空间数据文件配置。

有关系统表空间的其他信息在本节的以下主题下提供:

1.1 调整系统表空间的大小

1.1.1 增加

增加系统表空间大小的最简单方法是将其配置为自动扩展。为此,请在innodb_data_file_path设置中为最后一个数据文件指定autoextend属性,然后重新启动服务器。例如

innodb_data_file_path=ibdata1:10M:autoextend

当指定了autoextend属性时,数据文件的大小会根据需要自动增加8MB。innodb_autoextend_increment变量控制增量大小。

您还可以通过添加另一个数据文件来增加系统表空间的大小。为此:

1.停止MySQL服务器。

2.如果innodb_data_file_path设置中的最后一个数据文件是用autoextend属性定义的,请将其删除,然后修改size属性以反映当前数据文件的大小。要确定要指定的适当数据文件大小,请检查文件系统中的文件大小,然后将该值四舍五入到最接近的MB值,其中MB等于1024 x 1024字节。

3.将一个新的数据文件附加到innodb_data_file_path设置,可以选择指定自动扩展属性。只能为innodb_data_file_path设置中的最后一个数据文件指定autoextend属性。

4.启动MySQL服务器。

例如,这个表空间有一个自动扩展的数据文件:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

假设随着时间的推移,数据文件已增长到988MB。这是在修改大小属性以反映当前数据文件大小,并指定新的50MB自动扩展数据文件后的innodb_data_file_path设置:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

添加新的数据文件时,不要指定现有的文件名。当您启动服务器时,InnoDB会创建并初始化新的数据文件。

注意:
不能通过更改现有系统表空间数据文件的大小属性来增加其大小。

例如,在启动服务器时,将innodb_data_file_path设置从ibdata1:10M:autoextend更改为ibdata1:12M:autoextend会产生以下错误:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system
data file './ibdata1' is of a different size 640 pages (rounded down to MB) than
specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!

该错误表示现有数据文件大小(以InnoDB页面表示)与配置文件中指定的数据文件大小不同。如果遇到此错误,请恢复以前的innodb_data_file_path设置,并参考系统表空间大小调整说明。

1.1.2 减小

不支持减小现有系统表空间的大小。

实现较小系统表空间的唯一选择是将数据从备份恢复到使用所需系统表空间大小配置创建的新MySQL实例。

有关创建备份的信息,请参阅“InnoDB备份”。

有关为新系统表空间配置数据文件的信息

请参阅系统表空间数据文件配置。

为了避免大的系统表空间,请考虑为数据使用逐表文件表空间或通用表空间。

每个表的文件表空间是默认的表空间类型,在创建InnoDB表时隐式使用。

与系统表空间不同,每表文件表空间在被截断或删除时会将磁盘空间返回给操作系统。

有关更多信息,请参阅“每个表的文件表空间”。

通用表空间是多表表空间,也可以用作系统表空间的替代方案。

参见“通用表空间”。

1.1.3 为系统表空间使用原始磁盘分区

原始磁盘分区可以用作系统表空间数据文件。这项技术在Windows以及一些Linux和Unix系统上实现了无缓冲I/O,而没有文件系统开销。使用和不使用原始分区执行测试,以验证它们是否能提高系统性能。

使用原始磁盘分区时,请确保运行MySQL服务器的用户ID具有该分区的读写权限。例如,如果以mysql用户的身份运行服务器,则分区必须是mysql可读写的。如果使用--memlock选项运行服务器,则服务器必须以root身份运行,因此分区必须是root可读写的。

下面描述的过程涉及选项文件修改。有关更多信息,请参见“使用配置文件”。

【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客

1.1.4 在Linux和Unix系统上分配原始磁盘分区

要将原始设备用于新的服务器实例,首先通过使用raw关键字设置innodb_data_file_path来准备配置文件。例如

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw

分区必须至少与您指定的大小一样大。请注意,InnoDB中的1MB是1024×1024字节,而磁盘规范中的1MB通常意味着1000000字节。

然后使用--initialize或--initialize-unsecurity首次初始化服务器。InnoDB注意到raw关键字并初始化新分区,然后停止服务器。

现在重新启动服务器。InnoDB现在允许进行更改。

1.1.5 在Windows上分配原始磁盘分区

在Windows系统上,除了innodb_data_file_path设置在Windows上略有不同之外,适用于Linux和Unix系统的相同步骤和附带指南。例如

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Graw

这个对应于\\的Windows语法。\用于访问物理驱动器。在上面的例子中,D:是分区的驱动器号。

2 FPT表空间

每个表的文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统中的单个数据文件中。

本节中的以下主题介绍了每个表的文件表空间特征:

2.1 配置

默认情况下,InnoDB在file-per-table表空间中创建表。

此行为由innodb_file_per_table变量控制。

禁用innodb_file_per_table会导致innodb在系统表空间中创建表。

innodb_file_per_table设置可以在配置文件中指定,也可以在运行时使用SET GLOBAL语句进行配置。

在运行时更改设置需要足够的权限来设置全局系统变量。请查阅“系统变量权限”。

【MySQL精通之路】系统变量-系统变量权限-CSDN博客

配置文件:

[mysqld]
innodb_file_per_table=ON

在运行时使用SET GLOBAL:

mysql> SET GLOBAL innodb_file_per_table=ON;

2.2 FPT表空间数据文件

在MySQL数据目录下的模式目录中的.ibd数据文件中创建每个表空间的文件。

.ibd文件是以表(table_name.ibd)命名的。

例如,test.t1表的数据文件是在MySQL数据目录下的测试目录中创建的:

mysql> USE test;mysql> CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100)) ENGINE = InnoDB;$> cd /path/to/mysql/data/test
$> ls
t1.ibd

您可以使用CREATE TABLE语句DATA DIRECTORY子句在数据目录之外隐式地为每个表表空间的数据文件创建一个文件。

有关更多信息,请参阅“从外部创建表”。

2.3 FPT表空间优势

与共享表空间(如系统表空间或通用表空间)相比,每个表的文件表空间具有以下优势:

FPT表空间截断或删除文件中创建的表后,磁盘空间会返回到操作系统。截断或删除存储在共享表空间中的表会在共享表表空间数据文件中创建可用空间,该文件只能用于InnoDB数据。换句话说,在表被截断或删除后,共享表空间数据文件的大小不会缩小。

对驻留在共享表空间中的表执行表复制ALTER table操作会增加该表空间占用的磁盘空间量。这样的操作可能需要与表中的数据加上索引一样多的额外空间。此空间不会像FPT表空间那样释放回操作系统。

TRUNCATE TABLE在驻留在FPT表空间中的表上执行时性能更好。

FPT表空间数据文件可以在单独的存储设备上创建,用于I/O优化、空间管理或备份目的。参见“从外部创建表格”。

您可以从另一个MySQL实例导入一个表,该表位于FPT表空间中。

参见“导入InnoDB表”。

FPT表空间中创建的表支持与DYNAMICCOMPRESED行格式相关的功能,而系统表空间不支持这些功能。

参见“InnoDB行格式”。

【MySQL精通之路】行-数据结构-CSDN博客

当发生数据损坏、备份或二进制日志不可用或MySQL服务器实例无法重新启动时,存储在单个表空间数据文件中的表可以节省时间并提高成功恢复的机会。

FPT表空间中创建的表可以使用MySQL Enterprise Backup快速备份或恢复,而不会中断其他InnoDB表的使用。这对于备份计划不同或需要备份频率较低的表是有益的。

有关详细信息,请参阅进行部分备份。

FPT表空间允许通过监视表空间数据文件的大小来监视文件系统上的表大小。

当innodb_flush_method设置为O_DIRECT时,常见的Linux文件系统不允许对单个文件(如共享表空间数据文件)进行并发写入。因此,当将FPT表空间与此设置结合使用时,可能会提高性能。

共享表空间中的表的大小受64TB表空间大小限制。相比之下,FPT表空间的每个文件都有64TB的大小限制,这为单个表的大小增长提供了充足的空间

2.4 FPT表空间缺点

与共享表空间(如系统表空间或通用表空间)相比,FPT表空间有以下缺点。

对于FPT表空间FPT表空间有未使用的空间,这些空间只能由同一表的行使用,如果管理不当,可能会导致空间浪费。

fsync操作是在多个逐表文件的数据文件上执行的,而不是在一个共享的表空间数据文件上。由于fsync操作是按文件进行的,因此无法组合多个表的写入操作,这可能会导致fsync操作的总数增加。

mysqld必须为FPT表空间每个文件保留一个打开的文件句柄,如果在FPT表空间有许多表,这可能会影响性能。

FPT表空间有自己的数据文件时,需要更多的文件描述符。

存在更多碎片的可能性,这可能会阻碍DROP TABLE和表扫描性能。但是,如果碎片得到管理,则FPT表空间可以提高这些操作的性能。

FPT表空间中删除文件中的表时,会扫描缓冲池,对于大型缓冲池,这可能需要几秒钟的时间。扫描是用宽的内部锁定执行的,这可能会延迟其他操作。

innodb_autoextend_increment变量定义了增量大小,用于在自动扩展共享表空间文件变满时扩展该文件的大小。

该变量不适用于FPT表空间文件,这些文件是自动扩展的,无论innodb_utoextend_incament设置如何。FPT表空间扩展是少量的,之后扩展以4MB的增量出现。

3 一般表空间

4 Undo表空间

5 临时表空间

6 服务器脱机时移动表空间文件

7 禁用表空间路径验证

8 优化Linux上的表空间分配

9 表空间AUTOEXTEND_SIZE配置


本节介绍与InnoDB表空间相关的主题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川邮电职院领导访知了汇智,深化AI专业教育与行业对接

5月16日,四川邮电职业技术学院信息工程学院软件教研室的领导团队莅临我司,就人工智能专业建设进行深入的交流与学习。我司总经理、副总经理等高层领导亲自接待,对学院领导一行的到来表示了热烈的欢迎,并全程陪同参观了公司的核心区…

【技术实操】中标麒麟高级服务器操作系统实例分享,rsync数据同步配置方案

1.rsync介绍 rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份工具。 在守护进程模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH提供文件。SS…

几个模型介绍

1. Diffusion Models 简介: Diffusion models是一类生成模型,通过将数据逐渐引入噪声并学会逆向过程,从噪声生成数据。这些模型近年来在图像生成领域取得了显著的进展,例如Denoising Diffusion Probabilistic Models (DDPM)和Score-Based Ge…

基于BERT的中文情感分析实战

数据与代码链接见文末 bert开源项目解读:谷歌开源项目BERT源码解读与应用实例-CSDN博客 基于BERT的中文命名实体识别识别实战:基于BERT的中文命名实体识别识别实战-CSDN博客 1.数据 在data目录下,提供了中文情感分析的数据, 类别1代表正向情感,类别2代表负向情感。

Flutter 中的 CupertinoContextMenuAction 小部件:全面指南

Flutter 中的 CupertinoContextMenuAction 小部件:全面指南 在 Flutter 中,CupertinoContextMenuAction 是一个专门用于构建 iOS 风格的上下文菜单选项的组件。它为用户提供了一种便捷的方式来执行与特定项目相关的操作,例如在列表项上长按可…

金融信贷风控基础知识

一、所谓风控(What && Why) 所谓风控,可以拆解从2个方面看,即 风险和控制 风险(what) 风险 这里狭隘的特指互联网产品中存在的风险点,例如 账户风险 垃圾注册账号账号被泄露盗用 交易支付风险 刷单:为提升卖家店铺人气…

第13章 Python建模库介绍

以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析第2版》 用以学习和记录。 本书中,我已经介绍了Python数据分析的编程基…

DETR原理分析

TransformerDetection:引入视觉领域的首创DETR 论文名称:End-to-End Object Detection with Transformers 论文地址:https://arxiv.org/abs/2005.12872 重要的图要经常出现,下图就是: DETR原理分析 网络架构部分解读…

5.23总结

新增功能点 讨论 学生和老师均可发布话题,话题发布后,在该课程的用户可以在发布话题的课程中点击讨论参与课程的讨论,并可以进行评论,回复评论,点赞操作。每个话题发布时可添加多个图片文件,参加讨论的话…

SpringBoot配置tomcat access日志

Spring Boot使用嵌入式的Tomcat作为默认的Web服务器,可以通过配置文件方式来开启和定制access日志。access日志记录了每一个HTTP请求的信息,包括请求的来源、请求的资源、响应状态码等,常常用来做数据统计、性能监控,比如通过分析…

【学习笔记】后端(Ⅰ)—— NodeJS(Ⅱ)

NodeJS 3、进阶篇 —— Express框架 3.1、Express 框架介绍 3.2、Express 框架初体验 3.3、使用 3.4、中间件 3.5、托管静态文件 3.6、获取表单数据 3.7、防盗链 3.8、路由模式化 3.8、EJS 模板引擎 3.9、express-generator…

UNI-APP设置屏幕保持常亮-不熄灭屏幕

前言 最近在实际开发过程中,我们会发现在自己使用的app当中会根据系统无操作熄灭屏幕对于一下需要长时间保持屏幕的业务就很不友好,uni-app也是提供了相应方法加上代码之后-注意app端没报错-不生效就是权限问题-需要设置相对应权限-打自定义包 代码实现…

【BSP开发经验】用户态栈回溯技术

前言 在内核中有一个非常好用的函数dump_stack, 该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。同时当内核发生崩溃的时候就会自己将自己的调用栈输出到串口。 栈回溯非常有利于我…

溪谷联运SDK功能全面解析

近期,备受用户关注的手游联运10.0.0版本上线了,不少用户也选择了版本更新,其中也再次迎来了SDK的更新。溪谷软件和大家一起盘点一下溪谷SDK的功能都有哪些吧。 一、溪谷SDK具有完整的运营功能和高度扩展性 1.登录:登录是SDK最基础…

物体检测算法-R-CNN,SSD,YOLO

物体检测算法-R-CNN,SSD,YOLO 1 R-CNN2 SSD3 Yolo总结 1 R-CNN R-CNN(Region-based Convolutional Neural Network)是一种基于区域的卷积神经网络,是第一个成功将深度学习应用到目标检测上的算法。它主要由三个步骤组…

LeetCode 131题详解:高效分割回文串的递归与动态规划方法

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

currentTarget指向监听者Target:指向触发者

在JavaScript的事件处理中,currentTarget 和 target 是两个重要的属性,它们常常用于区分事件处理函数当前绑定的元素和实际触发事件的元素。这两个属性的意义可以用下面的方式解释: currentTarget 指向监听者:这意味着currentTa…

Spring: OncePerRequestFilter

文章目录 一、介绍二、使用 一、介绍 OncePerRequestFilter是Spring Boot中的一个过滤器抽象类,它在Spring Security中也得到了广泛的应用。这个过滤器抽象类的主要目的是确保在每次外部请求时只执行一次过滤操作,对于服务器内部之间的forward等请求&am…

关于如何创建一个可配置的 SpringBoot Web 项目的全局异常处理

前情概要 这个问题其实困扰了我一周时间,一周都在 Google 上旅游,我要如何动态的设置 RestControllerAdvice 里面的 basePackages 以及 baseClasses 的值呢?经过一周的时间寻求无果之后打算决定放弃的我终于找到了一些关键的线索。 当然在此…

Python中的json.dump与json.dumps对比

Python中的json.dump与json.dumps对比 json.dumps()json.dump() json.dumps() dumps 是 “dump string” 的缩写。它将Python对象转换(序列化)为JSON格式的字符串。数据被转换为一个字符串,并且这个字符串可以直接被写入文件、发送到网络&am…