Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  ndb_desc — Describe NDB Tables

25.5.9 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 NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    length_mm INT NOT NULL,
    weight_gm INT 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

$> ./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

可以在单个调用ndb_desc 中获取多个表的信息,通过使用它们的名称,使用空格分隔。所有表都必须在同一个数据库中。

可以使用--table 选项(简写:-t)和提供索引名称作为ndb_desc 的第一个参数,例如:

$> ./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

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

输出中的Version列包含表的架构对象版本。关于解释这个值,请参见NDB架构对象版本

使用NDB_TABLE注释嵌入在CREATE TABLEALTER TABLE语句中的三个表属性也可以在ndb_desc输出中看到。表的FRAGMENT_COUNT_TYPE总是显示在FragmentCountType列中。READ_ONLYFULLY_REPLICATED如果设置为1,则显示在Table options列中。您可以在执行以下ALTER TABLE语句后在mysql客户端中看到这些信息:

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 需要表的分片计数类型为(或设置为)ONE_PER_ LDM_PER_NODE_GROUPNDB 在这种情况下自动设置此值。您可以使用 SHOW CREATE 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=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
COMMENT='NDB_TABLE=READ_BACKUP=1,FULLY_REPLICATED=1'
1 row in set (0.01 sec)

由于 FRAGMENT_COUNT_TYPE 未被明确设置,因此在由 SHOW CREATE TABLE 打印的注释文本中不显示其值。然而,ndb_desc 可以显示更新后的该属性值。“表选项”列显示刚启用的二进制属性。您可以在以下输出中看到这点(加粗文本):

$> ./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

关于这些表属性的更多信息,请见 第 15.1.20.12 节,“设置 NDB 注释选项”

“Extent_空间”和“Free extent_空间”列仅适用于在磁盘上存储的 NDB 表;对于只在内存中存储的表,这些列始终包含值 0

为了illustrate their use,我们修改前面的示例。首先,我们必须创建必要的 Disk Data 对象,如下所示:

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;

(关于刚刚显示的语句和它们创建的对象,请见第25.6.11.1节,“NDB 集群磁盘数据对象”,以及第15.1.16节,“CREATE LOGFILE GROUP 语句”第15.1.21节,“CREATE TABLESPACE 语句”。)

现在,我们可以创建并-populate一个存储fish表的2个列到磁盘上的版本(删除之前的表版本,如果已经存在):

DROP TABLE IF EXISTS fish;

CREATE TABLE fish (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    length_mm INT NOT NULL,
    weight_gm INT 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);

ndb_desc在运行于该表版本时,显示以下输出:

$> ./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: 1001
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: readbackup
HashMap: DEFAULT-HASHMAP-3840-2
Tablespace id: 16
Tablespace: ts_1
-- Attributes --
id Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
name Varchar(80;utf8mb4_0900_ai_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

这意味着,每个分区为该表从表空间中分配了1048576字节,其中1044440字节用于追加存储。换言之,这1048576 - 1044440 = 4136字节每个分区当前正在用来存储来自该表的磁盘-基于列数据。显示为Free extent_space的字节数仅供存储fish表的磁盘列数据使用;因此,在选择自信息架构FILES表时,它不可见。

Tablespace idTablespace也用于磁盘数据表中显示。

对于完全复制的表,ndb_desc 只显示主分区副本所在的节点;只有副本副本(只)忽略。您可以使用 mysql 客户端从 table_distribution_statustable_fragmentstable_infotable_replicas 表在 ndbinfo 数据库中获取相关信息。

所有可以与 ndb_desc 一起使用的选项在以下表中显示。后续的描述将跟随该表。

  • --auto-inc-a

    显示表的AUTO_INCREMENT列的下一个值,如果该表有该列。

  • --blob-info, -b

    包括关于子ordinateBLOBTEXT列的信息。

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

  • --character-sets-dir

    Command-Line Format --character-sets-dir=path

    包含字符集的目录。

  • --connect-retries

    Command-Line Format --connect-retries=#
    Type 整数
    Default Value 12
    Minimum Value 0
    Maximum Value 12

    连接失败重试的次数。

  • --connect-retry-delay

    Command-Line Format --connect-retry-delay=#
    Type 整数
    Default Value 5
    Minimum Value 0
    Maximum Value 5

    管理服务器联系尝试之间等待的秒数。

  • --connect-string

    Command-Line Format --connect-string=connection_string
    Type 字符串
    Default Value [none]

    --ndb-connectstring相同。

  • --context, -x

    显示表的额外上下文信息,例如架构、数据库名称、表名称和内部ID。

  • --core-file

    Command-Line Format --core-file

    在错误时写入核心文件;用于调试。

  • --database=db_name, -d

    指定表所在的数据库。

  • --defaults-extra-file

    Command-Line Format --defaults-extra-file=路径
    Type 字符串
    Default Value [none]

    在读取全局文件后,读取给定的文件。

  • --defaults-file

    Command-Line Format --defaults-file=路径
    Type 字符串
    Default Value [none]

    从给定的文件中读取默认选项。

  • --defaults-group-suffix

    Command-Line Format --defaults-group-suffix=字符串
    Type 字符串
    Default Value [none]

    也读取concat(组,后缀)中的组。

  • --extra-node-info, -n

    包括表分区与它们所在数据节点之间的映射信息。这类信息可以用于验证分布式 awareness 机制和支持更高效的应用程序访问 NDB 集群中的数据。

    使用该选项也需要使用--extra-partition-info (-p) 选项。

  • --extra-partition-info, -p

    打印表的分区信息。

  • --help

    Command-Line Format --help

    显示帮助文本并退出。

  • --login-path

    Command-Line Format --login-path=path
    Type 字符串
    Default Value [none]

    从登录文件中读取给定的路径。

  • --no-login-paths

    Command-Line Format --no-login-paths

    跳过从登录路径文件中读取选项。

  • --ndb-connectstring

    Command-Line Format --ndb-connectstring=connection_string
    Type 字符串
    Default Value [none]

    ndb_mgmd设置连接字符串。语法:[nodeid=id;][host=]hostname[:port]。覆盖了NDB_ CONNECTSTRINGmy.cnf中的条目。

  • --ndb-mgm-tls

    Command-Line Format --ndb-mgm-tls=level
    Type 枚举值
    Default Value relaxed
    Valid Values

    relaxed

    strict

    设置连接到管理服务器所需的TLS支持级别;可以是relaxedstrictrelaxed(默认)表示尝试建立TLS连接,但成功不要求;strict表示需要TLS连接。

  • --ndb-mgmd-host

    Command-Line Format --ndb-mgmd-host=connection_string
    Type 字符串
    Default Value [none]

    --ndb-connectstring相同。

  • --ndb-nodeid

    Command-Line Format --ndb-nodeid=#
    Type Integer
    Default Value [none]

    设置当前节点的 ID,覆盖由--ndb-connectstring设置的任何 ID。

  • --ndb-optimized-node-selection

    Command-Line Format --ndb-optimized-node-selection

    启用事务选择节点的优化。默认情况下启用,可以使用--skip-ndb-optimized-node-selection来禁用。

  • --ndb-tls-search-path

    Command-Line Format --ndb-tls-search-path=列表
    Type 路径名称
    Default Value (Unix) $HOME/ndb-tls
    Default Value (Windows) $HOMEDIR/ndb-tls

    指定搜索 CA 文件的目录列表。Unix 平台上,目录名称使用冒号(:)分隔;Windows 系统上,使用分号字符(;)作为分隔符。目录引用可以是相对或绝对路径,可以包含一个或多个环境变量,每个变量以前缀的美元符号($)表示,并在使用时展开。

    搜索从最左侧的命名目录开始,自左向右直到找到文件为止。空字符串表示空搜索路径,这将导致所有搜索失败。由单个点 (.) 组成的字符串表示搜索路径限制于当前工作目录。

    如果未提供搜索路径,编译时默认值将被使用。这取决于平台:在 Windows 上,这是 \ndb-tls;在其他平台(包括 Linux)上,这是 $HOME/ndb-tls。可以通过编译 NDB 集群时使用-DWITH_NDB_TLS_SEARCH_PATH来覆盖该值。

  • --no-defaults

    Command-Line Format --no-defaults

    不从任何选项文件中读取默认选项,除了登录文件。

  • --print-defaults

    Command-Line Format --print-defaults

    打印程序参数列表并退出。

  • --retries=#, -r

    尝试连接这个次数后才放弃。每次连接尝试都将在每秒进行一次。

  • --table=tbl_name, -t

    指定查找索引的表。

  • --unqualified, -u

    使用未限定表名。

  • --usage

    Command-Line Format --usage

    显示帮助文本并退出;与--help相同。

  • --version

    Command-Line Format --version

    显示版本信息并退出。

输出的表索引按 ID 排序。