MySQL HeatWave 用户指南  / 第 2 章热浪  /  2.14 元数据查询

2.14 元数据查询

本节提供可用于检索 HeatWave 元数据的信息模式和性能模式查询。

笔记

对于可用于监控 HeatWave 节点状态、内存使用、数据加载、更改传播和查询的查询,请参阅第 5.2 节,“HeatWave 监控”

元数据查询分为以下类别。

二级引擎定义

要识别 MySQL 数据库系统上使用辅助引擎定义的表,请查询表的CREATE_OPTIONSINFORMATION_SCHEMA.TABLES 。该CREATE_OPTIONS列显示 SECONDARY_ENGINE子句(如果已定义)。表SECONDARY_ENGINE="RAPID"被加载到 HeatWave 中,对它们的更改会自动传播到 HeatWave 集群中的对应表。

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES 
       WHERE CREATE_OPTIONS LIKE '%SECONDARY_ENGINE%' AND TABLE_SCHEMA LIKE 'tpch';
+--------------+------------+--------------------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS           |
+--------------+------------+--------------------------+
| tpch         | customer   | SECONDARY_ENGINE="RAPID" |
| tpch         | lineitem   | SECONDARY_ENGINE="RAPID" |
| tpch         | nation     | SECONDARY_ENGINE="RAPID" |
| tpch         | orders     | SECONDARY_ENGINE="RAPID" |
| tpch         | part       | SECONDARY_ENGINE="RAPID" |
| tpch         | partsupp   | SECONDARY_ENGINE="RAPID" |
| tpch         | region     | SECONDARY_ENGINE="RAPID" |
| tpch         | supplier   | SECONDARY_ENGINE="RAPID" |
+--------------+------------+--------------------------+

您还可以使用查看单个表的创建选项 SHOW CREATE TABLE

笔记

在 8.0.31 版之前,创建转储文件时可能需要 SECONDARY ENGINE从语句中排除该选项 CREATE TABLE,因为在这些版本中无法对使用辅助引擎定义的表执行 DDL 操作。您可以使用该 变量从输出和mysqldump实用程序 转储的语句 show_create_table_skip_secondary_engine 中排除该SECONDARY ENGINE 子句。mysqldump还提供了一个 选项,可以 在转储操作期间启用系统变量。 SHOW CREATE TABLECREATE TABLE--show-create-skip-secondary-engineshow_create_table_skip_secondary_engine

排除的列

NOT SECONDARY要识别在 MySQL 数据库系统上 定义的表列,请查询表的EXTRAINFORMATION_SCHEMA.COLUMNSNOT SECONDARY在执行表加载操作时,使用 column 属性 定义的列不会加载到 HeatWave 中。

mysql> SELECT COLUMN_NAME, EXTRA FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME LIKE 't1' AND EXTRA LIKE '%NOT SECONDARY%';
+-------------+---------------+
| COLUMN_NAME | EXTRA         |
+-------------+---------------+
| O_COMMENT   | NOT SECONDARY |
+-------------+---------------+

您还可以NOT SECONDARY使用查看为单个表 定义的列SHOW CREATE TABLE

字符串列编码

  • 要识别 MySQL 数据库系统表中显式编码的字符串列,请查询表的 COLUMN_COMMENTINFORMATION_SCHEMA.COLUMNS 。例如:

    mysql> SELECT COLUMN_NAME, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS 
           WHERE TABLE_NAME LIKE 'orders' AND COLUMN_COMMENT LIKE '%ENCODING%';
    +-----------------+------------------------------+
    | COLUMN_NAME     | COLUMN_COMMENT               |
    +-----------------+------------------------------+
    | O_CLERK         | RAPID_COLUMN=ENCODING=SORTED |
    | O_ORDERPRIORITY | RAPID_COLUMN=ENCODING=SORTED |
    | O_ORDERSTATUS   | RAPID_COLUMN=ENCODING=SORTED |
    | O_CLERK         | RAPID_COLUMN=ENCODING=SORTED |
    | O_ORDERPRIORITY | RAPID_COLUMN=ENCODING=SORTED |
    | O_ORDERSTATUS   | RAPID_COLUMN=ENCODING=SORTED |
    +-----------------+------------------------------+

    您还可以使用查看为单个表显式定义的列编码SHOW CREATE TABLE

  • 要查看字典编码列的字典大小(以字节为单位):

    mysql> USE performance_schema;
    mysql> SELECT rpd_table_id.TABLE_NAME, rpd_columns.COLUMN_ID, rpd_columns.DICT_SIZE_BYTES 
           FROM rpd_table_id, rpd_columns WHERE rpd_table_id.ID = rpd_columns.TABLE_ID 
           AND rpd_columns.DICT_SIZE_BYTES > 0 ORDER BY rpd_table_id.TABLE_NAME;
    ------------+-----------+-----------------+
    | TABLE_NAME | COLUMN_ID | DICT_SIZE_BYTES |
    +------------+-----------+-----------------+
    | orders     |         3 |        25165912 |
    +------------+-----------+-----------------+

数据放置

  • 要识别在 MySQL 数据库系统上的表中定义为数据放置键的列,请查询表的 COLUMN_COMMENTINFORMATION_SCHEMA.COLUMNS 。例如:

    mysql> SELECT COLUMN_NAME, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS 
           WHERE TABLE_NAME LIKE 'orders' AND COLUMN_COMMENT LIKE '%DATA_PLACEMENT_KEY%';
    +-----------------+-----------------------------------+
    | COLUMN_NAME     | COLUMN_COMMENT                    |
    +-----------------+-----------------------------------+
    | O_CUSTKEY       | RAPID_COLUMN=DATA_PLACEMENT_KEY=1 |
    +-----------------+-----------------------------------+

    您还可以使用查看单个表的数据放置键SHOW CREATE TABLE

  • 要识别在 HeatWave 中加载的表中定义为数据放置键的 DATA_PLACEMENT_INDEX列,请在 performance_schema.rpd_columns表的列中查询DATA_PLACEMENT_INDEX值大于 0 的列,这表明该列被定义为数据放置键。例如:

    mysql> SELECT TABLE_NAME, COLUMN_NAME, DATA_PLACEMENT_INDEX 
           FROM performance_schema.rpd_columns r1 
           JOIN performance_schema.rpd_column_id r2 ON r1.COLUMN_ID = r2.ID 
           WHERE r1.TABLE_ID = (SELECT ID FROM performance_schema.rpd_table_id 
           WHERE TABLE_NAME = 'orders') AND r2.TABLE_NAME = 'orders' 
           AND r1.DATA_PLACEMENT_INDEX > 0 ORDER BY r1.DATA_PLACEMENT_INDEX;
    +------------+--------------+----------------------+
    | TABLE_NAME | COLUMN_NAME  | DATA_PLACEMENT_INDEX |
    +------------+--------------+----------------------+
    | orders     | O_TOTALPRICE |                    1 |
    | orders     | O_ORDERDATE  |                    2 |
    | orders     | O_COMMENT    |                    3 |
    +------------+--------------+----------------------+

    有关数据放置键索引值的信息,请参阅 第 2.7.2 节,“定义数据放置键”

  • 要确定数据放置分区是否被 JOINorGROUP BY 查询使用,您可以查询表的QEP_TEXTperformance_schema.rpd_query_stats 以查看prepart数据。(预分区prepart的缩写 。)操作的 数据包含单个值;例如: ,其中代表 HeatWave 节点的数量。大于 1 的值表示使用了数据放置分区。的 数据 prepartGROUP BY"prepart":##prepartJOINoperation 有两个值,表示 HeatWave 节点的数量;每个 JOIN分支一个;例如: 。分支的值大于 1表示该分支使用了数据放置分区。(值为 表示数据放置分区未被任何一个 分支使用。)只有在执行or 操作 时才会生成数据。要查询 上次执行的查询的数据: "prepart":[#,#]JOINJOIN"prepart":[1,1]JOINprepartGROUP BYJOINQEP_TEXT prepart

    mysql> SELECT CONCAT( '"prepart":[', (JSON_EXTRACT(QEP_TEXT->>"$**.prepart", '$[0][0]')), 
           "," ,(JSON_EXTRACT(QEP_TEXT->>"$**.prepart", '$[0][1]')) , ']' ) 
           FROM performance_schema.rpd_query_stats WHERE query_id = (select max(query_id) 
           FROM performance_schema.rpd_query_stats);
    +-----------------------------------------------------------------------------+
    | concat( '"prepart":[', (JSON_EXTRACT(QEP_TEXT->>"$**.prepart", '$[0][0]')), |
    |"," ,(JSON_EXTRACT(QEP_TEXT->>"$**.prepart", '$[0][1]')) , ']' )             |
    +-----------------------------------------------------------------------------+
    | "prepart":[2,2]                                                             |
    +-----------------------------------------------------------------------------+