当一个HeatWave集群被启用,并且您想要查询的数据被加载,符合条件的查询将自动从MySQL DB系统卸载到附加的HeatWave集群以加速处理。不需要任何特殊操作。只需从MySQL数据库系统连接的MySQL客户端或应用程序中运行查询。(客户端和应用程序不直接连接到HeatWave集群。)有关连接到MySQL数据库系统的信息,请参见MySQL数据库服务用户指南.在HeatWave集群处理一个查询后,结果将被发送回MySQL数据库系统和发出查询的客户端或应用程序。
运行查询将在本节的以下主题中进行描述:
有关相关的最佳实践,请参见第八章,最佳实践.
以下先决条件适用于卸载查询:
查询必须是
选择
声明。插入……选择
语句被支持,但只有选择
该声明的一部分被卸载到HeatWave。看到插入……SELECT语句.查询访问的所有表都必须用
快速
作为第二引擎。看到第3.5节,“二次发动机的定义”.查询访问的所有表必须加载在HeatWave集群中。看到第四章,加载数据.
自动提交
必须启用。如果自动提交
禁用,不卸载查询,在MySQL数据库系统上执行。检查自动提交
设置:mysql> SHOW VARIABLES LIKE 'autocommit';+---------------+-------+ | Variable_name |值 | +---------------+-------+ | 在自动提交| | +---------------+-------+
查询必须只使用支持的函数和操作符。看到第10.2节,“支持的函数和操作符”.
查询必须避免已知的限制。看到10.6节,“限制”.
如果不满足任何前提条件,查询不会被卸载,默认情况下返回到MySQL数据库系统执行。控件控制此行为use_secondary_engine
变量,它被设置为on在
默认情况下。一个use_secondary_engine =了
设置强制在MySQL数据库系统上执行查询。一个use_secondary_engine =强迫
设置强制在HeatWave集群上执行查询,如果不可能,则会失败。
在运行查询之前,使用解释
确定查询是否可以卸载。如果是这样,额外的
列的解释
输出显示了:”使用二次发动机快速
”.如果该信息没有出现,则无法卸载查询。
mysql> EXPLAIN SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY ORDER BY O_ORDERPRIORITY\G *************************** 1。row *************************** id: 1 select_type: SIMPLE table: orders partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 14862970 filtered: 33.33 Extra: Using where;使用临时的;使用filesort;使用二次发动机快速
在使用解释
要验证查询是否可以卸载,请运行查询并记录执行时间。
mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY;+-----------------+-------------+ | O_ORDERPRIORITY | ORDER_COUNT | +-----------------+-------------+ | 1-URGENT | 2017573 | |第二中学| 2015859 | | 3-MEDIUM | 2013174 | |不指定| 2014476 | | 5-LOW | 2013674 | +-----------------+-------------+ 5行集(0.04秒)
为了比较HeatWave集群查询的执行时间和MySQL DB System的执行时间,可以禁用use_secondary_engine
变量,然后再次运行查询,看看它在MySQL数据库系统上运行需要多长时间。
mysql> SET SESSION use_secondary_engine=OFF;mysql> SELECT O_ORDERPRIORITY, COUNT(*) AS ORDER_COUNT FROM orders WHERE O_ORDERDATE >= DATE '1994-03-01' GROUP BY O_ORDERPRIORITY;+-----------------+-------------+ | O_ORDERPRIORITY | ORDER_COUNT | +-----------------+-------------+ | 1-URGENT | 2017573 | |第二中学| 2015859 | | 3-MEDIUM | 2013174 | |不指定| 2014476 | | 5-LOW | 2013674 | +-----------------+-------------+ 5行集(8.91秒)
如果查询没有卸载,且无法确定原因,请参阅第9章,故障排除,或者尝试使用中描述的过程调试查询调试查询.
一个HeatWave集群一次处理一个查询。并发发出的查询是按执行优先级排序的。有关查询优先级的信息,请参见查询调度.
的选择
查询的插入……选择
语句被卸载到HeatWave执行,结果集被插入到MySQL数据库服务实例的指定表中。卸载的选择
减少对HeatWave的查询插入……选择
语句的执行时间。
的选择
表必须加载在HeatWave集群中,并且插入
表必须存在于MySQL数据库服务实例中。例如,下面的语句从订单
表,并将结果集插入orders2
MySQL数据库服务实例的表:
mysql> INSERT INTO orders2 SELECT * FROM orders;
使用注意:
MySQL服务器不支持的函数、操作符和属性
选择
查询选择
包含关于重复密钥更新
该条款不被卸载。选择. .UNION ALL
如果插入
表是相同的选择
因为MySQL Server在这种情况下使用了一个临时表,它不能被卸载。插入
语句不会被卸载。设置some_view
选择use_secondary_engine =强迫
在本例中不会导致语句失败并出现错误。该语句在MySQL数据库服务实例上执行,而不管use_secondary_engine
设置。
HeatWave使用基于查询成本估算的基于优先级的调度机制来调度并发发出的查询。调度机制优先考虑短时间运行的查询而不是长时间运行的查询,而且还考虑到查询时间,以便长时间运行的查询最终被安排执行。这种查询调度方法减少了总体查询执行等待时间。
当HeatWave空闲时,一个到达的查询将立即被安排执行。它没有排队。只有在前面的查询正在运行时,查询才会排队。
查询将根据其估计的成本进行优先排序。在查询编译时对每个查询执行轻量级的成本估算。根据估计的成本,查询被分配一个优先级,最短的查询被赋予最高的优先级并优先调度。
动态老化技术用于确保长时间运行的查询不会无限期地排队。每次查询完成执行时,调度器都会增加长时间运行的排队查询的优先级级别。通过这种方式,长时间运行的查询最终会达到最高优先级,并被安排执行。
查询通过取消ctrl - c
从调度队列中删除。
介绍如何启用查询跟踪,以及如何查询跟踪INFORMATION_SCHEMA。OPTIMIZER_TRACE
表,以了解为什么查询没有被卸载到HeatWave集群进行处理。
属性的查询检索优化器跟踪数据YEARWEEK ()
函数,目前不支持。
属性来启用跟踪
optimizer_trace
和optimizer_trace_offset
变量:mysql> SET SESSION optimizer_trace="enabled=on";mysql >设置optimizer_trace_offset = 2;
使用以下命令发出查询
解释
.如果额外的
列不显示”使用二次发动机快速
”,查询无法卸载。例如:mysql >解释选择YEARWEEK \ G (O_ORDERDATE)订单 *************************** 1。row *************************** id: 1 select_type: SIMPLE table: orders partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 1488913 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.00 sec)
查询
INFORMATION_SCHEMA。OPTIMIZER_TRACE
卸载故障信息表:mysql> SELECT QUERY, TRACE->'$**。从INFORMATION_SCHEMA.OPTIMIZER_TRACE Rapid_Offload_Fails”;+------------------------------------------------+------------------------------------------------------+ | 查询|跟踪——>“$ * *。Rapid_Offload_Fails ' | +------------------------------------------------+------------------------------------------------------+ | 解释选择YEARWEEK (O_ORDERDATE)从订单|{“原因”:“函数YEARWEEK是不支持 "}]| +------------------------------------------------+------------------------------------------------------+
报告的卸载失败的原因取决于所遇到的限制。对于最常见的问题,如不支持的子句或函数,将报告具体的原因。对于优化器执行的未定义的问题或不支持的查询转换,报告以下一般原因:
[{"Reason": "当前不支持的快速查询编译场景"}]
查询不满足次引擎执行查询开销阈值时,上报以下原因:
[{"Reason": "The estimated query cost does not exceed secondary_engine_cost_threshold."})
查询开销阈值请参见第9章,故障排除.