25.6.17.26 NDBinfo dict_obj_tree 表
表dict_obj_tree提供了从dict_obj_info表中获取的表信息树状视图。这主要用于测试,但也可以用来可视化NDB数据库对象的层次结构。
表dict_obj_tree包含以下列:
-
typeDICT 对象的类型;连接
dict_obj_types表以获取对象类型名称 -
id对象标识符;与
dict_obj_info表中的id列相同对于磁盘数据undo日志文件和数据文件,这与信息_schema中的
FILES表的LOGFILE_GROUP_NUMBER列相同;对于undo日志文件,也与ndbinfo中的logbuffers和logspaces表的log_id列相同。 -
name对象的完全限定名称;与
dict_obj_info中的fq_name列相同。对于表,这是
(与其database_name/def/table_nameparent_name相同);对于任何类型的索引,这形式为NDB$INDEX_index_id_CUSTOM -
parent_type对象的父对象的
DICT对象类型;连接dict_obj_types以获取对象类型的名称。 -
parent_id父对象的标识符;与
dict_obj_info表的id列相同 -
parent_name父对象的完全限定名称;与
dict_obj_info表的fq_name列相同对于一个表,这个名称的形式为
。对于一个索引,名称是database_name/def/table_namesys/def/。对于主键,它是table_id/index_namesys/def/,而对于唯一索引,它是table_id/PRIMARYsys/def/table_id/uk_name$unique -
root_type根对象的
DICT对象类型;连接dict_obj_types以获取对象类型的名称 -
root_id根对象的标识符;与
dict_obj_info表的id列相同 -
root_名称根对象的完全限定名;与
dict_obj_info表的fq_name列相同 -
level对象在层次结构中的级别
-
path完整的对象路径在
NDB对象层次结构中;对象之间使用右箭头(表示为->),从左侧开始,以根对象为起点 -
indented_name名称前缀右箭头(表示为
->)和对应对象深度在层次结构中的空格数
path列可以用来获取给定NDB数据库对象的完整路径,而indented_name列可以用来获取树状布局的完整层次信息。
示例:假设存在名为test的数据库,并且在该数据库中没有名为t1的表,执行以下SQL语句:
CREATE TABLE test.t1 (
a INT PRIMARY KEY,
b INT,
UNIQUE KEY(b)
) ENGINE = NDB;
使用以下查询可以获取刚创建的表的路径:
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE name LIKE 'test%t1';
+-------------+
| path |
+-------------+
| test/def/t1 |
+-------------+
1 row in set (0.14 sec)
使用表路径作为根名称,可以使用类似于以下查询来查看该表的所有依赖对象的路径:
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------------------------------------+
| path |
+----------------------------------------------------------+
| test/def/t1 |
| test/def/t1 -> sys/def/13/b |
| test/def/t1 -> sys/def/13/b -> NDB$INDEX_15_CUSTOM |
| test/def/t1 -> sys/def/13/b$unique |
| test/def/t1 -> sys/def/13/b$unique -> NDB$INDEX_16_UI |
| test/def/t1 -> sys/def/13/PRIMARY |
| test/def/t1 -> sys/def/13/PRIMARY -> NDB$INDEX_14_CUSTOM |
+----------------------------------------------------------+
7 rows in set (0.16 sec)
要获得对 t1 表的层次视图,包括其所有依赖对象,请执行类似于以下查询,该查询选择每个对象的缩进名称,其中根对象的名称为 test/def/t1:
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/t1 |
| -> sys/def/13/b |
| -> NDB$INDEX_15_CUSTOM |
| -> sys/def/13/b$unique |
| -> NDB$INDEX_16_UI |
| -> sys/def/13/PRIMARY |
| -> NDB$INDEX_14_CUSTOM |
+----------------------------+
7 rows in set (0.15 sec)
在使用 Disk Data 表时,请注意,在这个上下文中,表空间或日志文件组被认为是根对象。这意味着您必须知道给定表关联的任何表空间或日志文件组的名称,或者从 SHOW CREATE TABLE 中获取该信息,然后查询 INFORMATION_SCHEMA.FILES,或者类似于以下所示的方式:
mysql> SHOW CREATE TABLE test.dt_1\G
*************************** 1. row ***************************
Table: dt_1
Create Table: CREATE TABLE `dt_1` (
`member_id` int unsigned NOT NULL AUTO_INCREMENT,
`last_name` varchar(50) NOT NULL,
`first_name` varchar(50) NOT NULL,
`dob` date NOT NULL,
`joined` date NOT NULL,
PRIMARY KEY (`member_id`),
KEY `last_name` (`last_name`,`first_name`)
) /*!50100 TABLESPACE `ts_1` STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> SELECT DISTINCT TABLESPACE_NAME, LOGFILE_GROUP_NAME
-> FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='ts_1';
+-----------------+--------------------+
| TABLESPACE_NAME | LOGFILE_GROUP_NAME |
+-----------------+--------------------+
| ts_1 | lg_1 |
+-----------------+--------------------+
1 row in set (0.00 sec)
现在,您可以像这样获得表、表空间和日志文件组的层次信息:
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/dt_1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/dt_1 |
| -> sys/def/23/last_name |
| -> NDB$INDEX_25_CUSTOM |
| -> sys/def/23/PRIMARY |
| -> NDB$INDEX_24_CUSTOM |
+----------------------------+
5 rows in set (0.15 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'ts_1';
+-----------------+
| indented_name |
+-----------------+
| ts_1 |
| -> data_1.dat |
| -> data_2.dat |
+-----------------+
3 rows in set (0.17 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name LIKE 'lg_1';
+-----------------+
| indented_name |
+-----------------+
| lg_1 |
| -> undo_1.log |
| -> undo_2.log |
+-----------------+
3 rows in set (0.16 sec)