Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

23.5.14.22 ndbinfo dict_obj_tree テーブル

dict_obj_tree テーブルは、dict_obj_info テーブルからのテーブル情報のツリーベースのビューを提供します。 これは主にテストでの使用を目的としていますが、NDB データベースオブジェクトの階層を視覚化する場合に役立ちます。

dict_obj_tree テーブルには、次のカラムがあります:

  • type

    DICT オブジェクトのタイプ。オブジェクトタイプの名前を取得するには、dict_obj_types で結合

  • id

    オブジェクト識別子 (dict_obj_infoid カラムと同じ)

    ディスクデータの Undo ログファイルおよびデータファイルの場合、これはINFORMATION_SCHEMA.FILES テーブルのLOGFILE_GROUP_NUMBER カラムに表示される値と同じです。Undo ログファイルの場合、ndbinfologbuffers およびlogspaces テーブルのlog_id カラムに表示される値とも同じです

  • name

    オブジェクトの完全修飾名 (dict_obj_infofq_name カラムと同じ)

    テーブルの場合、これはdatabase_name/def/table_name (parent_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_name 形式になります。 インデックスの場合、名前はsys/def/table_id/index_name です。 主キーの場合はsys/def/table_id/PRIMARY、一意キーの場合はsys/def/table_id/uk_name$unique です

  • root_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 テーブルが追加されました。