21.4.10 ndb_desc —描述 NDBtable

ndb_desc提供了一个或多个NDBtable 的详细说明。

Usage

ndb_desc -c connection_string tbl_name -d db_name [options]

ndb_desc -c connection_string index_name -d db_name -t tbl_name

本节稍后列出了可以与ndb_desc一起使用的其他选项。

Sample Output

MySQLtable 的创建和填充语句:

USE test;

CREATE TABLE fish (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    length_mm INT(11) NOT NULL,
    weight_gm INT(11) NOT NULL,

    PRIMARY KEY pk (id),
    UNIQUE KEY uk (name)
) ENGINE=NDB;

INSERT INTO fish VALUES
    (NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
    (NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
    (NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);

ndb_desc的输出:

shell> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 2
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 337
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition       Row count       Commit count    Frag fixed memory       Frag varsized memory    Extent_space    Free extent_space
0               2               2               32768                   32768                   0               0
1               4               4               32768                   32768                   0               0

NDBT_ProgramExit: 0 - OK

可以通过使用ndb_desc的名称(以空格分隔)在一次调用中获得有关多个 table 的信息。所有 table 必须位于同一数据库中。

您可以使用--table(缩写为-t)选项并提供索引名称作为ndb_desc的第一个参数来获取有关特定索引的其他信息,如下所示:

shell> ./ndb_desc uk -d test -t fish
-- uk --
Version: 2
Base table: fish
Number of attributes: 1
Logging: 0
Index type: OrderedIndex
Index status: Retrieved
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
-- IndexTable 10/uk --
Version: 2
Fragment type: FragUndefined
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: yes
Number of attributes: 2
Number of primary keys: 1
Length of frm data: 0
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 2
ForceVarPart: 0
PartitionCount: 2
FragmentCount: 2
FragmentCountType: ONE_PER_LDM_PER_NODE
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
-- Attributes --
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
NDB$TNODE Unsigned [64] PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
-- Indexes --
PRIMARY KEY(NDB$TNODE) - UniqueHashIndex

NDBT_ProgramExit: 0 - OK

当以此方式指定索引时,--extra-partition-info--extra-node-info选项无效。

输出中的Version列包含 table 的架构对象版本。有关解释此值的信息,请参见NDB 架构对象版本

可以使用ndb_desc输出中可见的,可以使用嵌入在CREATE TABLEALTER TABLE语句中的NDB_TABLEComments 设置的 table 属性中的三个。table 格的FRAGMENT_COUNT_TYPE始终显示在FragmentCountType列中。 READ_ONLYFULLY_REPLICATED(如果设置为 1)在Table options列中显示。在mysqlClient 端中执行以下ALTER TABLE语句后,您可以看到此信息:

mysql> ALTER TABLE fish COMMENT='NDB_TABLE=READ_ONLY=1,FULLY_REPLICATED=1';
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
+---------+------+---------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                 |
+---------+------+---------------------------------------------------------------------------------------------------------+
| Warning | 1296 | Got error 4503 'Table property is FRAGMENT_COUNT_TYPE=ONE_PER_LDM_PER_NODE but not in comment' from NDB |
+---------+------+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

发出警告是因为READ_ONLY=1要求 table 的分片计数类型为ONE_PER_LDM_PER_NODE_GROUP(或设置为ONE_PER_LDM_PER_NODE_GROUP)。 NDB在这种情况下会自动设置。您可以使用显示创建 table检查ALTER TABLE语句是否具有所需的效果:

mysql> SHOW CREATE TABLE fish\G
*************************** 1. row ***************************
       Table: fish
Create Table: CREATE TABLE `fish` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `length_mm` int(11) NOT NULL,
  `weight_gm` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk` (`name`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
COMMENT='NDB_TABLE=READ_BACKUP=1,FULLY_REPLICATED=1'
1 row in set (0.01 sec)

由于未明确设置FRAGMENT_COUNT_TYPE,因此SHOW CREATE TABLE打印的 Comments 文本中未显示其值。 ndb_desc但是显示此属性的更新值。 Table options列显示刚刚启用的二进制属性。您可以在此处显示的输出中看到这一点(强调文本):

shell> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 4
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 380
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 1
FragmentCount: 1
FragmentCountType: ONE_PER_LDM_PER_NODE_GROUP
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options: readbackup, fullyreplicated
HashMap: DEFAULT-HASHMAP-3840-1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY DYNAMIC
length_mm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
weight_gm Int NOT NULL AT=FIXED ST=MEMORY DYNAMIC
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition       Row count       Commit count    Frag fixed memory       Frag varsized memory    Extent_space    Free extent_space

NDBT_ProgramExit: 0 - OK

有关这些 table 属性的更多信息,请参见第 13.1.18.9 节“设置 NDB_TABLE 选项”

Extent_spaceFree extent_space列仅适用于磁盘上具有列的NDB个 table;对于仅具有内存列的 table,这些列始终包含值0

为了说明它们的用法,我们修改了前面的示例。首先,我们必须创建必要的磁盘数据对象,如下所示:

CREATE LOGFILE GROUP lg_1
    ADD UNDOFILE 'undo_1.log'
    INITIAL_SIZE 16M
    UNDO_BUFFER_SIZE 2M
    ENGINE NDB;

ALTER LOGFILE GROUP lg_1
    ADD UNDOFILE 'undo_2.log'
    INITIAL_SIZE 12M
    ENGINE NDB;

CREATE TABLESPACE ts_1
    ADD DATAFILE 'data_1.dat'
    USE LOGFILE GROUP lg_1
    INITIAL_SIZE 32M
    ENGINE NDB;

ALTER TABLESPACE ts_1
    ADD DATAFILE 'data_2.dat'
    INITIAL_SIZE 48M
    ENGINE NDB;

(有关刚刚显示的语句及其创建的对象的更多信息,请参见第 21.5.10.1 节“ NDB 群集磁盘数据对象”以及第 13.1.15 节“ CREATE LOGFILE GROUP 语句”第 13.1.19 节“ CREATE TABLESPACE 语句”。)

现在,我们可以创建并填充fishtable 的版本,该 table 的 2 列存储在磁盘上(如果该 table 已经存在,则首先删除该 table 的先前版本):

CREATE TABLE fish (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    length_mm INT(11) NOT NULL,
    weight_gm INT(11) NOT NULL,

    PRIMARY KEY pk (id),
    UNIQUE KEY uk (name)
) TABLESPACE ts_1 STORAGE DISK
ENGINE=NDB;

INSERT INTO fish VALUES
    (NULL, 'guppy', 35, 2), (NULL, 'tuna', 2500, 150000),
    (NULL, 'shark', 3000, 110000), (NULL, 'manta ray', 1500, 50000),
    (NULL, 'grouper', 900, 125000), (NULL ,'puffer', 250, 2500);

当针对此版本的 table 运行时,ndb_desc将显示以下输出:

shell> ./ndb_desc -c localhost fish -d test -p
-- fish --
Version: 1
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 346
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 2
FragmentCount: 2
FragmentCountType: ONE_PER_LDM_PER_NODE
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(20;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
length_mm Int NOT NULL AT=FIXED ST=DISK
weight_gm Int NOT NULL AT=FIXED ST=DISK
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
uk(name) - OrderedIndex
uk$unique(name) - UniqueHashIndex
-- Per partition info --
Partition       Row count       Commit count    Frag fixed memory       Frag varsized memory    Extent_space    Free extent_space
0               2               2               32768                   32768                   1048576         1044440
1               4               4               32768                   32768                   1048576         1044400

NDBT_ProgramExit: 0 - OK

这意味着在每个分区上从该 table 的 table 空间分配了 1048576 个字节,其中 1044440 个字节保持空闲状态以用于其他存储。换句话说,当前每个分区使用 1048576-1044440 = 4136 字节来存储该 table 的基于磁盘的列中的数据。显示为Free extent_space的字节数仅可用于存储fishtable 中的磁盘列数据。因此,从INFORMATION_SCHEMA.FILEStable 中选择时看不到它。

对于完全复制的 table,ndb_desc仅显示持有主分区片段副本的节点;具有复制片段副本的节点(仅)将被忽略。从 NDB 7.5.4 开始,您可以使用mysqlClient 端从ndbinfo数据库中的table_distribution_statustable_fragmentstable_infotable_replicastable 中获取此类信息。

下 table 包含特定于ndb_desc的选项。附加说明如下 table 所示。有关大多数 NDB 群集程序(包括ndb_desc)共有的选项,请参见第 21.4.32 节“ NDB 群集程序的公用选项-NDB 群集程序的公用选项”

table21.246 ndb_desc 程序的命令行选项

FormatDescription添加,不建议使用或删除
--auto-inc ,

-a
如果 table 具有一个ADDED,则显示 AUTO_INCREMENT 整体的下一个值NDB 7.6.14
--blob-info ,
-b
在输出中包括 BLOBtable 的分区信息。要求还使用-p 选项(在所有基于 MySQL 5.7 的发行版中受支持)
--context ,
-x
显示 table 的其他信息,例如数据库,架构,名称,内部 ID添加:NDB 7.6.14
--database=dbname ,
-d
包含 table 的数据库名称(在所有基于 MySQL 5.7 的版本中受支持)
--extra-node-info ,
-n
在输出中包括分区到数据节点的 Map。要求还使用-p 选项(在所有基于 MySQL 5.7 的发行版中受支持)
--extra-partition-info ,
-p
显示有关分区的信息(在所有基于 MySQL 5.7 的版本中受支持)
--retries=# ,
-r
重试连接的次数(每秒一次)(所有基于 MySQL 5.7 的版本均支持)
--table=tbl_name ,
-t
指定要在其中查找索引的 table。使用此选项时,-p 和-n 无效,将被忽略(在所有基于 MySQL 5.7 的发行版中受支持)
--unqualified ,
-u
使用非限定的 table 名(所有基于 MySQL 5.7 的版本均支持)
  • --auto-inc , -a

显示 table 的AUTO_INCREMENT列的下一个值(如果有)。

  • --blob-info , -b

包括有关下级BLOBTEXT列的信息。

使用此选项还需要使用--extra-partition-info(-p)选项。

  • --context , -x

显示 table 的其他上下文信息,例如架构,数据库名称,table 名称和 table 的内部 ID。

  • --database=db_name , -d

指定应在其中找到 table 的数据库。

  • --extra-node-info , -n

包括有关 table 分区和它们所驻留的数据节点之间的 Map 的信息。此信息对于验证分发感知机制和支持更有效的应用程序访问 NDB 群集中存储的数据非常有用。

使用此选项还需要使用--extra-partition-info(-p)选项。

  • --extra-partition-info , -p

打印有关 table 分区的其他信息。

  • --retries=# , -r

放弃之前,请尝试多次连接。每秒进行一次连接尝试。

  • --table=tbl_name , -t

指定要在其中查找索引的 table。

  • --unqualified , -u

使用不合格的 table 名。

在 NDB 7.5.3 和更高版本中,输出中列出的 table 索引按 ID 排序。以前,这不是确定性的,并且可能因平台而异。 (缺陷#81763,错误#23547742)