MYSQL存储引擎InnoDB(二十七):系统表空间

系统表空间是更改缓冲区的存储区域。如果表是在系统表空间而不是独立表空间或通用表空间中创建的,它还可能包含表和索引数据。在以前的 MySQL 版本中,系统表空间包含InnoDB数据字典。在 MySQL 8.0 中,InnoDB将元数据存储在 MySQL 数据字典中。在以前的 MySQL 版本中,系统表空间还包含双写缓冲区存储区域。自 MySQL 8.0.20 起,此存储区域位于单独的双写文件中。

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


增加系统表空间的大小

增加系统表空间大小的最简单方法是将其配置为自动扩展。为此,请指定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 设置中,可选择指定 autoextend属性。只能为innodb_data_file_path设置中的最后一个数据文件指定autoextend属性 。


4. 启动 MySQL 服务器。

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


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


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

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


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


减小 InnoDB 系统表空间的大小

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

为避免使用大型系统表空间,请考虑为您的数据使用独立表空间或通用表空间。独立表空间是默认的表空间类型,在创建InnoDB 表时会隐式使用。与系统表空间不同,独立表空间在被截断或删除时会将磁盘空间返回给操作系统。通用表空间是多表表空间,也可以用作系统表空间的替代品。


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

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

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

下面描述的过程涉及选项文件修改。


在 Linux 和 Unix 系统上分配系统表空间原始磁盘分区

1. 创建新数据文件时, 请在innodb_data_file_path选项的数据文件大小后立即指定关键字newraw 。分区必须至少与您指定的大小一样大。请注意,InnoDB的1MB 是 1024 × 1024 字节,而磁盘规格中的 1MB 通常意味着 1,000,000 字节。

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


2. 重新启动服务器。InnoDB注意到 newraw关键字并初始化新分区。但是,暂时不要创建或更改任何 InnoDB表。否则,当您下次重新启动服务器时,InnoDB 重新初始化分区并且您的更改将丢失。(作为一种InnoDB安全措施,防止用户在 newraw指定任何分区时修改数据。)


3. InnoDB初始化新分区 后,停止服务器,将数据文件规范newraw 更改为raw

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


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


在 Windows 上分配系统表空间原始磁盘分区

在 Windows 系统上,适用于 Linux 和 Unix 系统的相同步骤和随附指南适用,只是 Windows 上的innodb_data_file_path设置略有不同。

1. 创建新数据文件时, 在innodb_data_file_path 选项的数据文件大小之后立即指定关键字newraw

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


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


2. 重新启动服务器。InnoDB注意到 newraw关键字并初始化新分区。


3. InnoDB初始化新分区 后,停止服务器,将数据文件规范newraw 更改为raw

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


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

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章