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 TABLE和ALTER TABLE语句中的NDB_TABLE
Comments 设置的 table 属性中的三个。table 格的FRAGMENT_COUNT_TYPE
始终显示在FragmentCountType
列中。 READ_ONLY
和FULLY_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_space
和Free 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 语句”。)
现在,我们可以创建并填充fish
table 的版本,该 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
的字节数仅可用于存储fish
table 中的磁盘列数据。因此,从INFORMATION_SCHEMA.FILEStable 中选择时看不到它。
对于完全复制的 table,ndb_desc仅显示持有主分区片段副本的节点;具有复制片段副本的节点(仅)将被忽略。从 NDB 7.5.4 开始,您可以使用mysqlClient 端从ndbinfo数据库中的table_distribution_status,table_fragments,table_info和table_replicastable 中获取此类信息。
下 table 包含特定于ndb_desc的选项。附加说明如下 table 所示。有关大多数 NDB 群集程序(包括ndb_desc)共有的选项,请参见第 21.4.32 节“ NDB 群集程序的公用选项-NDB 群集程序的公用选项”。
table21.246 ndb_desc 程序的命令行选项
Format | Description | 添加,不建议使用或删除 | |
---|---|---|---|
--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 的版本均支持) |
显示 table 的AUTO_INCREMENT
列的下一个值(如果有)。
使用此选项还需要使用--extra-partition-info(-p
)选项。
显示 table 的其他上下文信息,例如架构,数据库名称,table 名称和 table 的内部 ID。
指定应在其中找到 table 的数据库。
包括有关 table 分区和它们所驻留的数据节点之间的 Map 的信息。此信息对于验证分发感知机制和支持更有效的应用程序访问 NDB 群集中存储的数据非常有用。
使用此选项还需要使用--extra-partition-info(-p
)选项。
打印有关 table 分区的其他信息。
放弃之前,请尝试多次连接。每秒进行一次连接尝试。
指定要在其中查找索引的 table。
使用不合格的 table 名。
在 NDB 7.5.3 和更高版本中,输出中列出的 table 索引按 ID 排序。以前,这不是确定性的,并且可能因平台而异。 (缺陷#81763,错误#23547742)