Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  /  13.1.18 CREATE TABLESPACE 语句

13.1.18 CREATE TABLESPACE 语句

CREATE TABLESPACE tablespace_name
    ADD DATAFILE 'file_name'
    USE LOGFILE GROUP logfile_group
    [EXTENT_SIZE [=] extent_size]
    [INITIAL_SIZE [=] initial_size]
    [AUTOEXTEND_SIZE [=] autoextend_size]
    [MAX_SIZE [=] max_size]
    [NODEGROUP [=] nodegroup_id]
    [WAIT]
    [COMMENT [=] comment_text]
    ENGINE [=] engine_name

该语句用于创建表空间,表空间可以包含一个或多个数据文件,为表提供存储空间。使用此语句创建一个数据文件并将其添加到表空间。可以使用ALTER TABLESPACE 语句将其他数据文件添加到表空间(请参阅第 13.1.8 节,“ALTER TABLESPACE 语句”)。有关表空间命名的规则,请参阅 第 9.2 节,“模式对象名称”

笔记

所有 NDB Cluster 磁盘数据对象共享相同的命名空间。这意味着每个磁盘数据对象必须唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,表空间和日志文件组不能同名,表空间和数据文件不能同名。

一个或多个UNDO日志文件的日志文件组必须分配给要使用该 USE LOGFILE GROUP子句创建的表空间。 logfile_group必须是使用创建的现有日志文件组CREATE LOGFILE GROUP(请参阅第 13.1.14 节,“CREATE LOGFILE GROUP 语句”)。多个表空间可以使用相同的日志文件组进行 UNDO日志记录。

EXTENT_SIZE设置属于表空间的任何文件使用的范围的大小(以字节为单位) 。默认值为 1M。最小大小为 32K,理论上最大为 2G,但实际最大大小取决于许多因素。在大多数情况下,更改范围大小不会对性能产生任何可衡量的影响,并且建议在除最不寻常的情况外的所有情况下使用默认值。

区是磁盘空间分配 的单位。在使用另一个范围之前,一个范围将填充该范围可以包含的尽可能多的数据。理论上,每个数据文件最多可以使用 65,535 (64K) 个扩展区;但是,建议的最大值为 32,768 (32K)。单个数据文件的推荐最大大小为 32G,即 32K extents × 每个 extent 1 MB。此外,一旦一个区被分配给一个给定的分区,它就不能用来存储来自不同分区的数据;一个范围不能存储来自多个分区的数据。这意味着,例如,具有单个数据文件的表空间,其INITIAL_SIZE大小为 256 MB,并且其EXTENT_SIZE128M只有两个extent,所以最多可以用来存放两个不同磁盘数据表分区的数据。

您可以通过查询表来查看给定数据文件中有多少空闲盘区INFORMATION_SCHEMA.FILES ,从而得出该文件中剩余空闲空间的估计值。有关进一步的讨论和示例,请参阅 第 21.5.1 节,“INFORMATION_SCHEMA FILES 表”

INITIAL_SIZE参数以字节为单位设置数据文件的总大小。一旦文件被创建,它的大小就不能改变;但是,您可以使用 将更多数据文件添加到表空间ALTER TABLESPACE ... ADD DATAFILE。请参阅第 13.1.8 节,“ALTER TABLESPACE 语句”

INITIAL_SIZE是可选的;它的默认值为 134217728 (128 MB)。

在 32 位系统上,支持的最大值为 INITIAL_SIZE4294967296 (4 GB)。(漏洞 #29186)

设置 时EXTENT_SIZE,您可以选择在数字后面加上一个数量级的单字母缩写,类似于 中使用的那些my.cnf。通常,这是字母M(兆字节)或G(千兆字节)之一。在 MySQL NDB Cluster 7.3.2 及更高版本中,指定时也支持这些缩写INITIAL_SIZE。(错误#13116514、错误#16104705、错误#62858)

INITIAL_SIZE, EXTENT_SIZE, 和UNDO_BUFFER_SIZE四舍五入如下:

  • EXTENT_SIZE并且 UNDO_BUFFER_SIZE每个都四舍五入到最接近的 32K 的整数倍。

  • INITIAL_SIZE向下舍入 到最接近的 32K 整数倍。

    对于数据文件,INITIAL_SIZE需要进一步取整;将刚刚获得的结果四舍五入到最接近的整数倍EXTENT_SIZE (在任何四舍五入之后)。

刚刚描述的舍入是明确完成的,当执行任何此类舍入时,MySQL 服务器会发出警告。NDB 内核也使用四舍五入的值来计算 INFORMATION_SCHEMA.FILES列值和其他目的。但是,为避免意外结果,我们建议您在指定这些选项时始终使用 32K 的整数倍。

AUTOEXTEND_SIZE, MAX_SIZE, NODEGROUP, WAIT, 和 COMMENT被解析但被忽略,因此目前没有效果。这些选项旨在用于未来的扩展。

ENGINE参数决定了使用这个表空间的存储引擎,with engine_name是存储引擎的名字。目前,engine_name 必须是值之一NDBNDBCLUSTER

CREATE TABLESPACE与 一起使用时 ENGINE = NDB,将在每个 Cluster 数据节点上创建一个表空间和关联的数据文件。INFORMATION_SCHEMA.FILES 您可以通过查询表来验证数据文件是否已创建并获取有关它们的信息。例如:

mysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA
    -> FROM INFORMATION_SCHEMA.FILES
    -> WHERE TABLESPACE_NAME = 'newts' AND FILE_TYPE = 'DATAFILE';
+--------------------+-------------+----------------+
| LOGFILE_GROUP_NAME | FILE_NAME   | EXTRA          |
+--------------------+-------------+----------------+
| lg_3               | newdata.dat | CLUSTER_NODE=3 |
| lg_3               | newdata.dat | CLUSTER_NODE=4 |
+--------------------+-------------+----------------+
2 rows in set (0.01 sec)

(参见第 21.5.1 节,“INFORMATION_SCHEMA FILES 表”。)

CREATE TABLESPACE仅对 NDB Cluster 的磁盘数据存储有用。请参阅 第 18.6.11 节,“NDB Cluster 磁盘数据表”