2.7.3.2 自动数据放置

自动数据放置生成数据放置关键建议。加载表时,数据放置键用于在 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 示例”

JSONAdvisor 选项被指定为-object 格式 的键值对 。选项包括:

  • output:定义 Advisor 如何生成输出。允许的值为:

  • 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 基于近似模型提供数据放置关键建议。因此,不能保证建议会提高查询性能。