• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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 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(简短形式:)-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 TABLEALTER TABLE语句中的注释设置的三个表属性在ndb_desc输出中也可见。该表格FRAGMENT_COUNT_TYPE始终显示在该FragmentCountType列中。READ_ONLYFULLY_REPLICATED,如果设置为1,则显示在该Table options列中。您可以ALTER TABLEmysql客户端中执行以下语句后看到此消息:

    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在这种情况下会自动设置。您可以使用以下命令检查该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_spaceFree extent_space唯一的列是适用NDB具有在磁盘上的列的表;对于仅具有内存列的表,这些列始终包含value 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;
    

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

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

    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);
    

    针对该表的该版本运行时,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_statustable_fragmentstable_info,并table_replicas在表ndbinfo的数据库。

    下表包含特定于ndb_desc的选项。附加说明如下表。有关大多数NDB群集程序(包括ndb_desc)通用的选项,请参见“ NDB群集程序的通用选项— NDB群集程序的通用选项”。

    ndb_desc程序的命令行选项

    格式描述添加,不建议使用或删除

    --auto-inc

    -a

    如果表有一个,则显示AUTO_INCREMENT整体的下一个值

    添加:NDB 8.0.21

    --blob-info

    -b

    在输出中包括BLOB表的分区信息。要求还使用-p选项

    (在所有基于MySQL 8.0的版本中受支持)

    --context

    -x

    显示表的其他信息,例如数据库,架构,名称,内部ID

    添加:NDB 8.0.21

    --database=dbname

    -d

    包含表的数据库名称

    (在所有基于MySQL 8.0的版本中受支持)

    --extra-node-info

    -n

    在输出中包括分区到数据节点的映射。要求还使用-p选项

    (在所有基于MySQL 8.0的版本中受支持)

    --extra-partition-info

    -p

    显示有关分区的信息

    (在所有基于MySQL 8.0的版本中受支持)

    --retries=#

    -r

    重试连接的次数(每秒一次)

    (在所有基于MySQL 8.0的版本中受支持)

    --table=tbl_name

    -t

    指定要在其中查找索引的表。使用此选项时,-p和-n无效,将被忽略

    (在所有基于MySQL 8.0的版本中受支持)

    --unqualified

    -u

    使用不合格的表名

    (在所有基于MySQL 8.0的版本中受支持)


    • --auto-inc-a

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

    • --blob-info-b

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

      使用此选项还需要使用--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)