10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.3 mb
PDF (A4)- 41.4 mb
PDF (RPM)- 39.6 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册页(TGZ)- 260.7 kb
手册页(Zip)- 372.0 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

23.5.10.1 NDB集群磁盘数据对象

NDB集群磁盘数据存储通过以下对象实现:

  • 表空间:其他Disk Data对象的容器。一个表空间包含一个或多个数据文件和一个或多个undo日志文件组。

  • 数据文件:存放列数据。数据文件直接分配给表空间。

  • 撤销日志文件:包含回滚事务所需的撤消信息。分配给undo日志文件组。

  • 日志文件组:包含一个或多个undo日志文件。分配给表空间。

Undo日志文件和数据文件是每个数据节点文件系统中的实际文件;默认情况下,它们被放置在ndb_node_id_fsDataDir在NDB集群中指定config.ini文件,以及node_id为数据节点的节点ID。在创建undo日志或数据文件时,可以通过指定绝对路径或相对路径作为文件名的一部分,将这些文件放在其他位置。本节稍后将展示创建这些文件的语句。

撤消日志文件仅由“磁盘数据”表使用,不需要也不使用NDB仅存储在内存中的表。

NDB集群表空间和日志文件组不作为文件实现。

虽然并非所有Disk Data对象都实现为文件,但它们都共享相同的名称空间。这意味着每个磁盘数据对象必须唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,表空间和日志文件组不能同时命名dd1

假设你已经建立了一个包含所有节点(包括管理节点和SQL节点)的NDB集群,在磁盘上创建一个NDB集群表的基本步骤如下:

  1. 创建一个日志文件组,并为其分配一个或多个undo日志文件(undo日志文件有时也称为undofile).

  2. 创建表空间;将日志文件组以及一个或多个数据文件分配给表空间。

  3. 创建Disk Data表,该表空间用于数据存储。

中的SQL语句都可以完成这些任务mysql客户端或其他MySQL客户端应用程序,如下面的示例所示。

  1. 我们创建一个名为lg_1使用创建日志文件组.这个日志文件组由两个撤销日志文件组成,我们将其命名为undo_1.log而且undo_2.log,其初始大小分别为16mb和12mb。(缺省情况下,undo日志文件的初始大小为128 MB)也可以指定日志文件组的undo缓冲区的大小,或者允许它假设缺省值为8 MB。在本例中,我们将undo缓冲区的大小设置为2 MB。日志文件组必须创建一个undo日志文件;所以我们加上undo_1.loglg_1在这个创建日志文件组声明:

    新建LOGFILE组lg_1,添加LOGFILE 'undo_1.log'

    添加undo_2.log到日志文件组,使用以下方法修改日志文件组声明:

    修改LOGFILE GROUP lg_1,添加“undo_2.log”INITIAL_SIZE 12M ENGINE

    一些注意事项:

    • . log此处使用的文件扩展名不是必需的。我们使用它仅仅是为了使日志文件易于识别。

    • 每一个创建日志文件组而且修改日志文件组语句必须包含引擎选择。此选项唯一允许的值是NDBCLUSTER而且NDB

      重要的

      同一NDB集群在任何给定时间内最多只能存在一个日志文件组。

    • 将撤销日志文件添加到日志文件组时使用添加撤销文件'文件名的文件文件名创建于ndb_node_id_fs目录中的DataDir集群中每个数据节点的node_id为数据节点的节点ID。每个undo日志文件都是SQL语句中指定的大小。例如,如果一个NDB集群有4个数据节点,那么修改日志文件组语句创建4个undo日志文件,在4个数据节点的数据目录中各1个;每个文件都有名称undo_2.log每个文件大小为12mb。

    • UNDO_BUFFER_SIZE受可用系统内存量的限制。

    • 看到第13.1.16节“创建LOGFILE组语句”,第13.1.6节,ALTER LOGFILE GROUP语句,以了解更多有关这些陈述的资料。

  2. 现在我们可以创建一个表空间——Disk Data表用于存储数据的文件的抽象容器。表空间与特定的日志文件组相关联;创建新表空间时,必须指定用于撤销日志记录的日志文件组。您还必须指定至少一个数据文件;创建表空间后,可以在表空间中添加更多的数据文件。也可以从表空间中删除数据文件(参见本节后面的示例)。

    假设我们希望创建一个名为ts_1它使用lg_1作为其日志文件组。我们希望表空间包含两个数据文件,分别命名为data_1.dat而且data_2.dat,其初始大小分别为32兆及48兆。的默认值INITIAL_SIZE我们可以使用两条SQL语句来做到这一点,如下所示:

    创建表空间ts_1添加数据文件“data_1.dat”使用LOGFILE GROUP lg_1 INITIAL_SIZE 32M ENGINE为表空间ts_1添加数据文件“data_2.dat”

    创建表空间语句创建表空间ts_1使用数据文件data_1.dat,及同事ts_1使用日志文件组lg_1.的修改表空间添加第二个数据文件(data_2.dat).

    一些注意事项:

    • 的情况也是如此. log本例中用于undo日志文件的文件扩展名,对于.dat文件扩展名;它仅仅是为了便于识别。

    • 将数据文件添加到表空间时使用添加数据文件'文件名的文件文件名创建于ndb_node_id_fs目录中的DataDir集群中每个数据节点的node_id为数据节点的节点ID。每个数据文件都是SQL语句中指定的大小。例如,如果一个NDB集群有4个数据节点,那么修改表空间语句创建4个数据文件,每个文件在4个数据节点的数据目录中;每个文件都有名称data_2.dat每个文件大小为48mb。

    • NDB每个表空间预留4%空间,供数据节点重启时使用。该空间不可用于存储数据。

    • 创建表空间语句必须包含引擎条款;表空间中只能创建与表空间使用相同存储引擎的表。为修改表空间,一个引擎子句被接受,但已弃用,并将在未来的版本中删除。为NDB表空间,此选项唯一允许的值是NDBCLUSTER而且NDB

    • 在NDB 8.0.20及以后版本中,在给定表空间使用的所有数据文件中以循环方式分配区段。

    • 有关的更多信息创建表空间而且修改表空间语句,看到第13.1.21节,创建表空间语句,第13.1.10节,ALTER TABLESPACE语句

  3. 现在可以使用表空间中的文件创建一个表,其未索引的列存储在磁盘上ts_1

    CREATE TABLE dt_1 (member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, last_name VARCHAR(50) NOT NULL, first_name VARCHAR(50) NOT NULL, dob DATE NOT NULL, joined DATE NOT NULL, INDEX(last_name, first_name))表空间ts_1存储磁盘引擎NDBCLUSTER;

    表空间ts_1存储磁盘讲述了NDB存储引擎使用表空间ts_1用于磁盘上的数据存储。

    一次表ts_1已创建如图所示,您可以执行吗插入选择更新,删除语句,就像其他MySQL表一样。

    属性还可以指定单个列是存储在磁盘上还是存储在内存中存储子句作为列定义的一部分创建表ALTER TABLE声明。存储磁盘使列存储在磁盘上,和存储记忆导致使用内存存储。看到第13.1.20节“CREATE TABLE语句”,以获取更多资料。

可以获取NDB命令所创建的磁盘数据文件和undo日志文件文件表中的INFORMATION_SCHEMA数据库,如下所示:

mysql>选择FILE_NAME作为文件,FILE_TYPE作为类型,TABLESPACE_NAME作为表空间,TABLE_NAME作为名称,LOGFILE_GROUP_NAME作为“文件组”,FREE_EXTENTS作为自由,total_extensions作为总数从INFORMATION_SCHEMA。ENGINE='ndbcluster'的文件;+--------------+----------+------------+------+------------+------+---------+ | 表空间类型文件| | | |文件名集团| |总自由  | +--------------+----------+------------+------+------------+------+---------+ | ./ undo_1.log | UNDO日志| lg_1零| | lg_1 | 0 | 4194304 | |。/ undo_2.log | UNDO日志| lg_1零| | lg_1 | 0 | 3145728 | |。/ data_1.dat功能| | ts_1零| | lg_1 32 32 | | | |。/ data_2.dat功能| | ts_1零| | lg_1 48 48 | | |+--------------+----------+------------+------+------------+------+---------+ 4行集(0.00秒)

有关更多信息和示例,请参见章节26.3.15,“INFORMATION_SCHEMA FILES表”

索引隐式存储在磁盘上的列。对于表dt_1正如刚才所示的示例中定义的那样,只有强加于人而且加入列存储在磁盘上。这是因为在idlast_name,first_name列,因此属于这些列的数据存储在RAM中。只有非索引的列可以保存在磁盘上;索引和索引列数据继续存储在内存中。在设计Disk Data表时,必须考虑使用索引和节省RAM之间的权衡。

不能向已显式声明的列添加索引存储磁盘,而不首先将其存储类型更改为内存;任何这样做的尝试都会失败并报错。一个列隐式地使用磁盘存储可以被索引;完成此操作后,列的存储类型将更改为内存自动。通过隐式地,我们指的是存储类型没有声明,而是继承自父表的列。在下面的CREATE TABLE语句中(使用表空间ts_1前面定义),列c2而且c3隐式使用磁盘存储:

mysql> CREATE TABLE ti (-> c1 INT PRIMARY KEY, -> c2 INT, -> c3 INT, -> c4 INT ->) -> STORAGE DISK -> TABLESPACE ts_1 -> ENGINE NDBCLUSTER;查询OK, 0行受影响(1.31秒)

因为c2c3,c4他们自己没有申报吗存储磁盘,可以将它们编入索引。这里,我们将索引添加到c2而且c3,分别使用,创建索引而且ALTER TABLE

mysql>创建索引i1 (c2);查询OK, 0 rows affected(2.72秒)Records: 0 duplicate: 0 warning: 0 mysql> ALTER TABLE ti ADD INDEX i2(c3);查询OK, 0行受影响(0.92秒)记录:0重复:0警告:0

显示创建表确认添加了索引。

mysql >显示创建表ti \ G  *************************** 1。行  *************************** 表:ti创建表:创建表“透明国际”(c1的int(11)不是NULL, c2的int(11)默认为空,c3的int(11)默认为空,c4的int(11)默认为空,主键(c1),关键的i1 (c2),关键的i2 (c3)) / * !50100表空间' ts_1 '存储磁盘*/ ENGINE=ndbcluster默认CHARSET=latin1 (0.00 sec)

你可以看到使用ndb_desc索引列(强调文本)现在使用内存中而不是磁盘上的存储:

壳>。/ ndb_desc - d测试t1 - t1 -版本:33554433片段类型:HashMapPartition K值:6分钟负载因素:78年最大负荷系数:80临时表:没有数量的属性:4号主键:1纳数据长度:317 Max行:0行校验和:1行GCI: 1 SingleUserMode: 0 ForceVarPart: 1 PartitionCount: 4 FragmentCount: 4 PartitionBalance: FOR_RP_BY_LDM ExtraRowGciBits: 0 ExtraRowAuthorBits: 0 TableStatus:检索表选项:HashMap:默认- hashmap -3840-4——属性——c1 Int主键分布键AT=固定ST=内存c2 Int NULL AT=固定ST=内存c3 Int NULL AT=固定ST=内存c4 Int NULL AT=FIXED ST=DISK——Indexes——PRIMARY KEY(c1) - UniqueHashIndex i2(c3) - OrderedIndex PRIMARY(c1) - OrderedIndex i1(c2) - OrderedIndex NDBT_ProgramExit: 0 - OK

性能报告。如果将Disk Data文件保存在与数据节点文件系统分开的物理磁盘上,则使用Disk Data存储的集群的性能将大大提高。集群中的每个数据节点都必须这样做,才能获得明显的好处。

可以使用绝对和相对文件系统路径添加UNDOFILE而且添加数据文件;相对路径是相对于数据节点的数据目录计算的。

必须按照特定顺序创建日志文件组、表空间和使用这些文件组的任何Disk Data表。这同样适用于删除这些对象,受以下约束:

  • 只要有表空间使用,日志文件组就不能被删除。

  • 只要表空间中有数据文件,就不能删除。

  • 只要还有表空间在使用,就不能从表空间中删除任何数据文件。

  • 不能删除与创建文件的表空间以外的其他表空间关联创建的文件。

例如,要删除到目前为止在本节中创建的所有对象,您可以使用以下语句:

DROP TABLE dt_1;DROP DATAFILE 'data_2.dat' -> ENGINE NDBCLUSTER;DROP DATAFILE 'data_1.dat' -> ENGINE NDBCLUSTER;DROP >表空间ts_1mysql> DROP LOGFILE GROUP lg_1

这些语句必须按照所示的顺序执行,除了两个Alter tablespace…删除数据文件语句可以按任意一种顺序执行。