MYSQL存储引擎InnoDB(二十九):通用表空间(上)

通用表空间是使用CREATE TABLESPACE语句创建的InnoDB?共享表空间。

通用表空间功能

通用表空间提供以下功能:

1、与系统表空间类似,通用表空间是能够为多个表存储数据的共享表空间。

2、与独立表空间相比,通用表空间具有潜在的内存优势?。服务器在表空间的整个生命周期内将表空间元数据保存在内存中。与单独的独立表空间中相同数量的表相比,较少的通用表空间中的多个表消耗的表空间元数据内存更少。

3、通用表空间数据文件可以放置在相对于或独立于 MySQL 数据目录的目录中,这为您提供了独立表空间的许多数据文件和存储管理能力。与独立表空间一样,将数据文件放在 MySQL 数据目录之外的能力允许您单独管理关键表的性能。用户可以为特定表设置 RAID 或 DRBD,或者将表绑定到特定磁盘。

4、通用表空间支持所有表行格式和相关功能。

5、TABLESPACE选项可用于控制CREATE TABLE在通用表空间、独立表空间或系统表空间中创建表。

6、TABLESPACE选项可用于控制ALTER TABLE在通用表空间、独立表空间和系统表空间之间移动表。

创建通用表空间

通用表空间是使用?CREATE TABLESPACE语句创建的。

CREATE TABLESPACE tablespace_name 
    [ADD DATAFILE 'file_name'] 
    [FILE_BLOCK_SIZE = value] 
        [ENGINE [=] engine_name] 

可以在数据目录中或在其外部创建通用表空间。为避免与隐式创建的独立表空间冲突,不支持在数据目录下的子目录中创建通用表空间。在数据目录之外创建通用表空间时,该目录必须存在并且InnoDB必须在创建表空间之前设置该目录。要使InnoDB能识别未知目录,请将目录添加到?innodb_directories参数值。innodb_directories是只读启动选项。配置它需要重新启动服务器。

例子:

在数据目录中创建一个通用表空间:

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

或者

mysql> CREATE TABLESPACE `ts1` Engine=InnoDB;

从 MySQL 8.0.14 开始,ADD DATAFILE子句是可选的,在此之前是必需的。如果创建表空间时未指定ADD DATAFILE子句,则会隐式创建具有唯一文件名的表空间数据文件。唯一文件名是一个128位UUID,格式为五组由短划线 (aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee )分隔的十六进制数字。通用表空间数据文件包括?.ibd扩展文件。在复制环境中,在源上创建的数据文件名与在副本上创建的数据文件名不同。

在数据目录之外的目录中创建通用表空间:

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd' Engine=InnoDB;

如果表空间目录不在数据目录下,您可以指定相对于数据目录的路径。在此示例中,?my_tablespace目录与数据目录处于同一级别:

mysql> CREATE TABLESPACE `ts1` ADD DATAFILE '../my_tablespace/ts1.ibd' Engine=InnoDB;

将表添加到通用表空间

创建通用表空间后,CREATE TABLE?tbl_name?… TABLESPACE [=]?tablespace_nameALTER TABLE?tbl_name?TABLESPACE [=]?tablespace_name语句可用于向表空间添加表,如下例所示:?

CREATE TABLE:
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1;

ALTER TABLE:
mysql> ALTER TABLE t2 TABLESPACE ts1;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注