自动数据放置生成数据放置关键建议。加载表时,数据放置键用于在 HeatWave 节点之间对表数据进行分区。JOIN
按键列对表数据进行
分区GROUP BY
可以通过避免在查询执行时在 HeatWave 节点之间重新分配数据相关的成本来提高查询性能。Data Placement Advisor 通过分析表统计数据和 HeatWave 查询历史生成数据放置关键建议。有关数据放置键的更多信息,请参阅第 2.7.2 节,“定义数据放置键”。
CALL sys.heatwave_advisor ([options]);
options: {
JSON_OBJECT("key","value"[,"key","value"] ...)
"key","value":
["output",{"normal"|"silent"|"help"}]
["target_schema",JSON_ARRAY({"schema_name"[,"schema_name"]}]
["exclude_query",JSON_ARRAY("query_id"[,"query_id"] ...)]
["query_session_id",JSON_ARRAY("query_session_id"[,"query_session_id"] ...)]
["auto_dp",JSON_OBJECT(auto_dp_option)]
}
auto_dp_option: {
["benefit_threshold",N]
["max_combinations",N]
}
有关语法示例,请参阅 第 2.7.3.4 节,“Advisor 示例”。
JSON
Advisor 选项被指定为-object 格式
的键值对
。选项包括:
-
output
:定义 Advisor 如何生成输出。允许的值为:normal
:默认。生成发送到 表stdout
和 发送到heatwave_advisor_report
表的汇总输出。(请参阅 第 2.7.3.5 节“顾问报告表”。)silent
:仅将输出发送到heatwave_advisor_report
表。(请参阅 第 2.7.3.5 节,“顾问报告表”。)"silent"
如果不需要人类可读的输出,则输出类型很有用;例如,当脚本使用输出时。help
:显示 Advisor 命令行帮助。请参阅 第 2.7.3.4 节,“顾问示例”。
target_schema
:定义一个或多个模式供 Advisor 分析。该列表以JSON
-array 格式指定。如果未指定目标架构,则会分析 HeatWave 中的所有架构。指定目标架构后,Advisor 会为属于目标架构的表生成建议。要获得最准确的建议,请一次指定一个架构。如果您的查询访问多个模式中的表,则仅在多个模式上运行 Advisor。exclude_query
:定义 Advisor 分析查询统计信息时要排除的查询 ID。要识别查询 ID,请查询performance_schema.rpd_query_stats
表。有关查询示例,请参阅 第 2.7.3.4 节,“顾问示例”。query_session_id
:定义会话 ID,用于按会话 ID 过滤查询。要识别会话 ID,请查询该performance_schema.rpd_query_stats
表。有关查询示例,请参阅 第 2.7.3.4 节,“顾问示例”。-
auto_dp
:定义数据放置功能的设置,该功能推荐数据放置键。设置包括:benefit_threshold
:以百分比值表示的最小查询性能改进。Advisor 仅建议估计达到或超过benefit_threshold
. 默认值为 0.01 (1%)。查询性能是所有已分析查询的综合度量。max_combinations
:顾问在提出建议之前考虑的数据放置键组合的最大数量。默认值为 10000。支持的范围是 1 到 100000。指定较少的组合可以更快地生成建议,但建议可能不是最佳的。
如果您打算针对编码和数据放置建议运行 Advisor,建议您先运行自动编码,应用推荐的编码,重新运行查询,然后运行自动数据放置。此序列允许使用适当的字符串列编码计算数据放置性能优势,从而提高 Advisor 内部模型的准确性。
为 Advisor 生成数据放置建议:
表格必须加载到 HeatWave 中。
-
必须有至少 5 个查询的查询历史记录。如果查询包含
JOIN
在 HeatWave 集群中加载的表或GROUP BY
键,则该查询将被计算在内。在不再加载或自查询运行后重新加载的表上执行的查询不计算在内。要查看查询历史记录,请查询
performance_schema.rpd_query_stats
表。例如:mysql> SELECT query_id, LEFT(query_text,160) FROM performance_schema.rpd_query_stats;
要获得最准确的数据放置建议,请一次在一个模式上运行 Advisor。在以下示例中,Advisor使用该选项在tpch_1024
架构上运行。target_schema
没有指定其他选项,这意味着使用默认选项设置。
CALL sys.heatwave_advisor(JSON_OBJECT("target_schema",JSON_ARRAY("tpch_1024")));
Advisor 输出提供有关 Advisor 执行的每个阶段的信息。数据放置建议输出显示建议的数据放置键和应用键的估计性能优势。
脚本生成输出提供了一个查询,用于检索生成的 DDL 语句以实现建议的数据放置键。在不重新加载表的情况下,无法将数据放置键添加到表中或进行修改。因此,Advisor 生成用于卸载表、添加键和重新加载表的 DDL 语句。
mysql> CALL sys.heatwave_advisor(JSON_OBJECT("target_schema",JSON_ARRAY("tpch_1024")));
+-------------------------------+
| INITIALIZING HEATWAVE ADVISOR |
+-------------------------------+
| Version: 1.12 |
| |
| Output Mode: normal |
| Excluded Queries: 0 |
| Target Schemas: 1 |
| |
+-------------------------------+
6 rows in set (0.01 sec)
+---------------------------------------------------------+
| ANALYZING LOADED DATA |
+---------------------------------------------------------+
| Total 8 tables loaded in HeatWave for 1 schemas |
| Tables excluded by user: 0 (within target schemas) |
| |
| SCHEMA TABLES COLUMNS |
| NAME LOADED LOADED |
| ------ ------ ------ |
| `tpch_1024` 8 61 |
| |
+---------------------------------------------------------+
8 rows in set (0.02 sec)
+----------------------------------------------------------------------+
| AUTO DATA PLACEMENT |
+----------------------------------------------------------------------+
| Auto Data Placement Configuration: | | |
| Minimum benefit threshold: 1% | | |
| Producing Data Placement suggestions for current setup: | | |
| Tables Loaded: 8 |
| Queries used: 189 |
| Total query execution time: 22.75 min |
| Most recent query executed on: Tuesday 8th June 2021 16:29:02 |
| Oldest query executed on: Tuesday 8th June 2021 16:05:43 |
| HeatWave cluster size: 5 nodes |
| |
| All possible Data Placement combinations based on query history: 120 |
| Explored Data Placement combinations after pruning: 90 |
| |
+----------------------------------------------------------------------+
16 rows in set (12.38 sec)
+---------------------------------------------------------------------------------------+
| DATA PLACEMENT SUGGESTIONS |
+---------------------------------------------------------------------------------------+
| Total Data Placement suggestions produced for 2 tables |
| |
| TABLE DATA PLACEMENT DATA PLACEMENT |
| NAME CURRENT KEY SUGGESTED KEY |
| ------ -------------- -------------- |
| `tpch_1024`.`LINEITEM` L_ORDERKEY, L_LINENUMBER L_ORDERKEY |
| `tpch_1024`.`SUPPLIER` S_SUPPKEY S_NATIONKEY |
| |
| Expected benefit after applying Data Placement suggestions |
| Runtime saving: 6.17 min |
| Performance benefit: 27% |
| |
+---------------------------------------------------------------------------------------+
12 rows in set (16.42 sec)
+-------------------------------------------------------------------------------------------+
| SCRIPT GENERATION |
+-------------------------------------------------------------------------------------------+
| Script generated for applying suggestions for 2 loaded tables |
| |
| Applying changes will take approximately 1.18 h |
| |
| Retrieve script containing 12 generated DDL commands using the query below: |
| SELECT log->>"$.sql" AS "SQL Script" FROM sys.heatwave_advisor_report WHERE type = "sql"|
| ORDER BY id; |
| |
| Caution: Executing the generated script will alter the column comment and secondary engine|
| flags in the schema |
| |
+-------------------------------------------------------------------------------------------+
9 rows in set (16.43 sec)
SELECT log->>"$.sql" AS "SQL Script" FROM sys.heatwave_advisor_report WHERE type = "sql"
ORDER BY id;
+-------------------------------------------------------------------------------------------+
| SQL Script |
+-------------------------------------------------------------------------------------------+
| SET SESSION innodb_parallel_read_threads = 48; |
| ALTER TABLE `tpch_1024`.`LINEITEM` SECONDARY_UNLOAD; |
| ALTER TABLE `tpch_1024`.`LINEITEM` SECONDARY_ENGINE=NULL; |
| ALTER TABLE `tpch_1024`.`LINEITEM` MODIFY `L_ORDERKEY` bigint NOT NULL COMMENT |
| 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1'; |
| ALTER TABLE `tpch_1024`.`LINEITEM` SECONDARY_ENGINE=RAPID; |
| ALTER TABLE `tpch_1024`.`LINEITEM` SECONDARY_LOAD; |
| SET SESSION innodb_parallel_read_threads = 48; |
| ALTER TABLE `tpch_1024`.`SUPPLIER` SECONDARY_UNLOAD; |
| ALTER TABLE `tpch_1024`.`SUPPLIER` SECONDARY_ENGINE=NULL; |
| ALTER TABLE `tpch_1024`.`SUPPLIER` MODIFY `S_NATIONKEY` int NOT NULL COMMENT |
| 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1'; |
| ALTER TABLE `tpch_1024`.`SUPPLIER` SECONDARY_ENGINE=RAPID; |
| ALTER TABLE `tpch_1024`.`SUPPLIER` SECONDARY_LOAD; |
+-------------------------------------------------------------------------------------------+
12 rows in set (0.00 sec)
使用说明:
如果表已经有数据放置键或在运行 Advisor 之前自定义了列,Advisor 可能会生成 DDL 语句以删除先前定义的数据放置键。
Advisor 仅在估计数据放置键可提高查询性能时提供建议。如果不是,则返回一条信息消息并且不提供任何建议。
Advisor 基于近似模型提供数据放置关键建议。因此,不能保证建议会提高查询性能。