MySQL HeatWave 用户指南  / 第 2 章热浪  /  2.13 故障处理

2.13 故障处理

  • 问题:查询未卸载。

    • 解决方案 A:您的查询包含不受支持的谓词、函数、运算符,或者遇到了其他一些限制。请参阅 查询先决条件

    • 方案B:查询执行时间小于查询成本阈值。

      HeatWave 专为快速执行大型分析查询而设计。更小、更简单的查询,例如那些使用索引进行快速查找的查询,通常在 MySQL 数据库系统上执行得更快。为了避免将廉价查询卸载到 HeatWave,优化器使用查询成本估算阈值。只有超过 MySQL 数据库系统阈值的查询才会被考虑卸载。

      查询成本阈值单位值与 MySQL 优化器用于查询成本估算的单位值相同。阈值为 100000.00000。查询成本估算值与执行查询所需的实际时间之间的比率取决于查询类型、硬件类型和 MySQL DB 系统配置。

      要确定 MySQL 数据库系统上的查询成本:

      1. 禁用 use_secondary_engine 以强制执行 MySQL 数据库系统。

        SET SESSION use_secondary_engine=OFF;
      2. 使用 运行查询 EXPLAIN

        EXPLAIN select_query;
      3. 查询 Last_query_cost 状态变量。如果该值小于 100000.00000,则无法卸载查询。

        SHOW STATUS LIKE 'Last_query_cost';
    • 解决方案C:您正在查询的表未加载。您可以通过查询 LOAD_STATUSHeatWave Performance Schema 表中的数据来检查 HeatWave 中表的加载状态。例如:

      mysql> USE performance_schema;
      mysql> SELECT NAME, LOAD_STATUS FROM rpd_tables,rpd_table_id 
             WHERE rpd_tables.ID = rpd_table_id.ID;
      +------------------------------+---------------------+
      | NAME                         | LOAD_STATUS         |
      +------------------------------+---------------------+
      | tpch.supplier                | AVAIL_RPDGSTABSTATE |
      | tpch.partsupp                | AVAIL_RPDGSTABSTATE |
      | tpch.orders                  | AVAIL_RPDGSTABSTATE |
      | tpch.lineitem                | AVAIL_RPDGSTABSTATE |
      | tpch.customer                | AVAIL_RPDGSTABSTATE |
      | tpch.nation                  | AVAIL_RPDGSTABSTATE |
      | tpch.region                  | AVAIL_RPDGSTABSTATE |
      | tpch.part                    | AVAIL_RPDGSTABSTATE |
      +------------------------------+---------------------+

      有关加载状态的信息,请参阅 第 5.4.8 节,“rpd_tables 表”

      或者,运行以下语句:

      mysql> ALTER TABLE tbl_name SECONDARY_LOAD;

      如果表已经加载,会报如下错误:

      ERROR 13331 (HY000): Table is already loaded.
    • 解决方案 D: HeatWave 集群失败。要确定 HeatWave 集群的状态,请运行以下语句:

      mysql> SHOW GLOBAL STATUS LIKE 'rapid_plugin_bootstrapped';
      +---------------------------------+------------+
      | Variable_name                   | Value      |
      +---------------------------------+------------+
      | rapid_plugin_bootstrapped       | YES        |
      +---------------------------------+------------+

      有关状态值 , 请参阅第 4 章系统和状态变量rapid_plugin_bootstrapped

      如果 HeatWave Cluster 出现故障,请在控制台中重新启动它并在必要时重新加载数据。HeatWave 恢复机制应该自动重新加载数据。

  • 问题:您无法更改表定义以排除列、定义字符串列编码或定义数据放置键。

    解决方案:在 8.0.31 版本之前,不允许对使用辅助引擎定义的表进行 DDL 操作。在这些版本中,必须在为表定义辅助引擎之前或同时定义列属性。如果您需要对在这些版本中使用辅助引擎定义的表执行 DDL 操作,请先删除该SECONDARY_ENGINE 选项:

    mysql> ALTER TABLE orders SECONDARY_ENGINE = NULL;

    有关详细信息,请参阅 第 2.4 节,“修改表”

  • 问题:您在执行查询时遇到内存不足错误。

    解决方案: HeatWave 针对网络使用而非内存进行了优化。如果在运行查询时遇到内存不足错误,请尝试 MIN_MEM_CONSUMPTION设置的策略来 rapid_execution_strategy 查询:

    SET SESSION rapid_execution_strategy = MIN_MEM_CONSUMPTION;

    还可以考虑通过执行簇大小估计来检查数据的大小。如果您的数据大幅增长,您可能需要额外的 HeatWave 节点。

    避免或重写产生笛卡尔积的查询。有关详细信息,请参阅 运行查询

  • 问题:表加载操作失败并显示ERROR HY000:运行并行扫描时出错。

    解决方法:TEXT大于65532字节 的 SECONDARY_LOAD运算中被拒绝。将 -type 列值的大小减小TEXT到小于 65532 字节或在加载表之前排除该列。请参阅 排除表列

  • 问题:更改传播失败并出现以下错误: “在更改传播期间遇到字节的 Blob/文本值, n但 RAPID 仅支持最多 65532 字节的文本值。

    解决方案: TEXT -type 大于 65532 字节的值在更改传播期间被拒绝。将 -type 值的大小减少TEXT到小于 65532 字节。如果遇到此错误,请检查受影响表的更改传播状态。如果禁用更改传播,请重新加载表。请参阅 第 2.2.7 节,“更改传播”

  • 问题:运行自动并行加载时遇到警告。

    解决方案:当 Auto Parallel Load 遇到产生警告的问题时,它会自动切换到dryrun模式以防止出现进一步的问题。在这种情况下,Auto Parallel Load 实用程序生成的加载语句仍然可以使用实用程序输出中提供的 SQL 语句获得,但应避免或谨慎使用这些加载语句,因为它们可能会出现问题。

    • 如果一条警告消息表明 HeatWave 集群或服务不活动或不在线,这意味着负载无法启动,因为 HeatWave 集群未连接到 MySQL 数据库系统或不活动。在这种情况下,配置并启用 HeatWave Cluster 并再次运行 Auto Parallel Load。

    • 如果警告消息指示 MySQL 主机内存不足以加载所有表,则字典编码列的估计字典大小对于 MySQL 主机内存而言可能太大。尝试将列编码更改VARLEN为释放 MySQL 主机内存中的空间。

    • 如果警告消息表明 HeatWave Cluster 内存不足以加载所有表,则估计的表大小对于 HeatWave Cluster 内存来说太大了。尝试从加载操作中排除某些模式或表或增加集群的大小。

    • 如果一条警告消息表明正在进行并发表加载,这意味着另一个客户端会话当前正在将表加载到 HeatWave 中。当并发加载操作正在进行时,无法保证自动并行加载估计的准确性。等待并发加载操作完成,然后再运行自动并行加载。

  • 问题:尝试检索生成的自动并行加载或顾问 DDL 语句时,错误消息指示 heatwave_advisor_reportor heatwave_load_report表不存在。例如:

    mysql> SELECT log->>"$.sql" AS "SQL Script" FROM sys.heatwave_advisor_report  
           WHERE type = "sql" ORDER BY id;
    ERROR 1146 (42S02): Table 'sys.heatwave_advisor_report' doesn't exist
    
    
    mysql> SELECT log->>"$.sql" AS "SQL Script" FROM sys.heatwave_load_report  
           WHERE type = "sql" ORDER BY id;
    ERROR 1146 (42S02): Table 'sys.heatwave_load_report' doesn't exist

    解决方案:当从不同的会话查询报表时,可能会发生此错误。使用发出 Auto Parallel Load 或 Advisor 语句的同一会话查询CALL报表。如果用于调用 Auto Parallel Load 或 Advisor 的会话已超时或已终止,也会发生此错误。在这种情况下,请在查询报表之前再次运行 Auto Load 或 Advisor。