このページは機械翻訳したものです。
dict_obj_tree テーブルは、dict_obj_info テーブルからのテーブル情報のツリーベースのビューを提供します。 これは主にテストでの使用を目的としていますが、NDB データベースオブジェクトの階層を視覚化する場合に役立ちます。
dict_obj_tree テーブルには、次のカラムがあります:
typeDICTオブジェクトのタイプ。オブジェクトタイプの名前を取得するには、dict_obj_typesで結合idオブジェクト識別子 (
dict_obj_infoのidカラムと同じ)ディスクデータの Undo ログファイルおよびデータファイルの場合、これは
INFORMATION_SCHEMA.FILESテーブルのLOGFILE_GROUP_NUMBERカラムに表示される値と同じです。Undo ログファイルの場合、ndbinfologbuffersおよびlogspacesテーブルのlog_idカラムに表示される値とも同じですnameオブジェクトの完全修飾名 (
dict_obj_infoのfq_nameカラムと同じ)テーブルの場合、これは
(database_name/def/table_nameparent_nameと同じ) です。すべてのタイプのインデックスの場合、これはNDB$INDEX_という形式になりますindex_id_CUSTOMparent_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$uniqueroot_typeルートオブジェクトの
DICTオブジェクト型。オブジェクト型の名前を取得するには、dict_obj_typesで結合root_idルートオブジェクトの識別子 (
dict_obj_infoテーブルのidカラムと同じ)root_nameルートオブジェクトの完全修飾名 (
dict_obj_infoテーブルのfq_nameカラムと同じ)level階層内のオブジェクトのレベル
パスNDBオブジェクト階層内のオブジェクトへの完全なパス。オブジェクトは、左のルートオブジェクトから右矢印 (->) で区切られますindented_name階層内のオブジェクトの深さに対応する、(
->として表される) 右矢印の前に複数のスペースがある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) 「ディスクデータ」テーブルを操作する場合、このコンテキストではテーブルスペースまたはログファイルグループがルートオブジェクトとみなされることに注意してください。 つまり、特定のテーブルに関連付けられているテーブルスペースまたはログファイルグループの名前を知っているか、SHOW CREATE TABLE からこの情報を取得してからINFORMATION_SCHEMA.FILES をクエリーするか、次に示すような方法が必要です:
mysql> SHOW CREATE TABLE test.dt_1\G*************************** 1. row *************************** Table: dt_1Create 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_ci1 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) NDB 8.0.24 にdict_obj_tree テーブルが追加されました。