ndb_desc —描述NDB表
ndb_desc提供了一个或多个NDB
表的详细说明。
用法
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一起使用的其他选项。
样本输出
MySQL表的创建和填充语句:
USE test;CREATE TABLE fish ( id INT(11) NOT NULLAUTO_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 fishVALUES (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
(简短形式:)-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
输出列包含表的模式对象的版本。有关解释此值的信息,请参见 NDB架构对象版本。
可以使用NDB_TABLE
嵌入在CREATE TABLE
和ALTER TABLE
语句中的注释设置的三个表属性在ndb_desc输出中也可见。该表格FRAGMENT_COUNT_TYPE
始终显示在该FragmentCountType
列中。READ_ONLY
和FULLY_REPLICATED
,如果设置为1,则显示在该Table options
列中。您可以ALTER TABLE
在mysql客户端中执行以下语句后看到此消息:
mysql>ALTER TABLE fishCOMMENT ='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
要求表的分片计数类型为(或设置为)ONE_PER_LDM_PER_NODE_GROUP
;NDB
在这种情况下会自动设置。您可以使用以下命令检查该ALTER TABLE
语句是否具有所需的效果SHOW CREATE 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
。但是,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
有关这些表属性的更多信息,请参见“设置NDB_TABLE选项”。
的Extent_space
和Free extent_space
唯一的列是适用NDB
具有在磁盘上的列的表;对于仅具有内存列的表,这些列始终包含value 0
。
为了说明它们的用法,我们修改了前面的示例。首先,我们必须创建必要的磁盘数据对象,如下所示:
CREATE LOGFILE GROUP lg_1ADD UNDOFILE 'undo_1.log'INITIAL_SIZE 16MUNDO_BUFFER_SIZE 2MENGINE NDB ;ALTER LOGFILE GROUP lg_1ADD UNDOFILE 'undo_2.log'INITIAL_SIZE 12MENGINE NDB ;CREATE TABLESPACE ts_1ADD DATAFILE 'data_1.dat'USE LOGFILE GROUP lg_1INITIAL_SIZE 32MENGINE NDB ;ALTER TABLESPACE ts_1ADD DATAFILE 'data_2.dat'INITIAL_SIZE 48MENGINE NDB ;
(有关刚刚显示的语句及其创建的对象的更多信息,请参见“ NDB群集磁盘数据对象”以及“ CREATE LOGFILE GROUP语句”和“ CREATE TABLESPACE语句”。)
现在,我们可以创建并填充该fish
表的版本,该表将其两列存储在磁盘上(如果该表已经存在,则首先删除该表的先前版本):
CREATE TABLE fish ( id INT(11) NOT NULLAUTO_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_1STORAGE DISK ENGINE =NDB ;INSERT INTO fishVALUES (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: 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
这意味着在每个分区上从该表的表空间中分配了1048576个字节,其中1044440个字节可用于其他存储。换句话说,当前每个分区使用1048576-1044440 = 4136字节来存储该表的基于磁盘的列中的数据。显示的字节数Free extent_space
仅可用于存储fish
表中的磁盘列数据;因此,从INFORMATION_SCHEMA.FILES
表中选择时不可见。
对于完全复制的表,ndb_desc仅显示持有主分区片段副本的节点;具有复制片段副本的节点(仅)将被忽略。与NDB 7.5.4开始,您可以获取这些信息,使用MySQL的客户端,从table_distribution_status
,table_fragments
,table_info
,并table_replicas
在表ndbinfo
的数据库。
下表包含特定于ndb_desc的选项。附加说明如下表。有关大多数NDB群集程序(包括ndb_desc)通用的选项,请参见“ NDB群集程序的通用选项— NDB群集程序的通用选项”。
ndb_desc程序的命令行选项
格式 | 描述 | 添加,不建议使用或删除 |
---|---|---|
| 如果表有一个,则显示AUTO_INCREMENT整体的下一个值 | 添加:NDB 8.0.21 |
| 在输出中包括BLOB表的分区信息。要求还使用-p选项 | (在所有基于MySQL 8.0的版本中受支持) |
| 显示表的其他信息,例如数据库,架构,名称,内部ID | 添加:NDB 8.0.21 |
| 包含表的数据库名称 | (在所有基于MySQL 8.0的版本中受支持) |
| 在输出中包括分区到数据节点的映射。要求还使用-p选项 | (在所有基于MySQL 8.0的版本中受支持) |
| 显示有关分区的信息 | (在所有基于MySQL 8.0的版本中受支持) |
| 重试连接的次数(每秒一次) | (在所有基于MySQL 8.0的版本中受支持) |
| 指定要在其中查找索引的表。使用此选项时,-p和-n无效,将被忽略 | (在所有基于MySQL 8.0的版本中受支持) |
| 使用不合格的表名 | (在所有基于MySQL 8.0的版本中受支持) |
--auto-inc
,-a
AUTO_INCREMENT
如果有表列,请显示下一个值。--blob-info
,-b
包括有关下属
BLOB
和TEXT
列的信息。使用此选项还需要使用
--extra-partition-info
(-p
)选项。--context
,-x
显示表的其他上下文信息,例如模式,数据库名称,表名称和表的内部ID。
--database=db_name
,-d
指定应在其中找到表的数据库。
--extra-node-info
,-n
包括有关表分区和它们所驻留的数据节点之间的映射的信息。此信息对于验证分发感知机制和支持更有效的应用程序访问NDB群集中存储的数据非常有用。
使用此选项还需要使用
--extra-partition-info
(-p
)选项。--extra-partition-info
,-p
打印有关表分区的其他信息。
--retries=#
,-r
放弃之前,请尝试多次连接。每秒进行一次连接尝试。
--table=tbl_name
,-t
指定要在其中查找索引的表。
--unqualified
,-u
使用不合格的表名。
在NDB 7.5.3和更高版本中,输出中列出的表索引按ID排序。以前,这不是确定性的,并且可能因平台而异。(缺陷#81763,错误#23547742)