本节提供可用于检索 HeatWave 元数据的信息模式和性能模式查询。
对于可用于监控 HeatWave 节点状态、内存使用、数据加载、更改传播和查询的查询,请参阅第 5.2 节,“HeatWave 监控”。
元数据查询分为以下类别。
二级引擎定义
要识别 MySQL 数据库系统上使用辅助引擎定义的表,请查询表的CREATE_OPTIONS
列
INFORMATION_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
TABLE
CREATE
TABLE
--show-create-skip-secondary-engine
show_create_table_skip_secondary_engine
排除的列
NOT
SECONDARY
要识别在 MySQL 数据库系统上
定义的表列,请查询表的EXTRA
列
INFORMATION_SCHEMA.COLUMNS
。NOT 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_COMMENT
列INFORMATION_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_COMMENT
列INFORMATION_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 节,“定义数据放置键”。
-
要确定数据放置分区是否被
JOIN
orGROUP BY
查询使用,您可以查询表的QEP_TEXT
列performance_schema.rpd_query_stats
以查看prepart
数据。(“预分区”prepart
的缩写 。)操作的 数据包含单个值;例如: ,其中代表 HeatWave 节点的数量。大于 1 的值表示使用了数据放置分区。的 数据prepart
GROUP BY
"prepart":
#
#
prepart
JOIN
operation 有两个值,表示 HeatWave 节点的数量;每个JOIN
分支一个;例如: 。分支的值大于 1表示该分支使用了数据放置分区。(值为 表示数据放置分区未被任何一个 分支使用。)只有在执行or 操作 时才会生成数据。要查询 上次执行的查询的数据:"prepart":[
#,#
]JOIN
JOIN
"prepart":[1,1]
JOIN
prepart
GROUP BY
JOIN
QEP_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] | +-----------------------------------------------------------------------------+