You need to enable JavaScript to run this app.
导航
冷热分离限制说明
最近更新时间:2024.08.22 11:05:31首次发布时间:2024.06.26 12:45:22

本文汇总了使用冷热分离功能的相关限制。

功能限制

  • 仅支持在创建实例时选择是否创建包含冷热分离功能的实例;对于已创建的不包含冷热分离功能的实例,不支持动态开启该功能。

  • 已创建含有冷热分离功能的实例,不支持动态关闭该功能,但可以选择不使用冷数据归档能力。详情请参将冷数据转换回热数据

  • 不支持对一张表同时使用 HTAP 和冷热分离功能。关于 HTAP 的详情信息,请参见 HTAP 介绍

操作限制

冷表虽在功能上与普通表没有区别,仍然可以做 DDL 和 DML 操作,但性能较差,为避免 IO 异常和性能风险,部分操作不建议执行,详情如下表所示:

说明

  • 对冷表执行 DML/DDL 操作时,建议先将其转换为热表,待执行完 DML/DDL 操作之后再转换为冷表。
  • 以下场景示例仅作为参考,请结合实际业务场景判断可能存在的风险。
操作类型冷表限制说明
DDLinstant尾部加列支持尾部加列只修改元数据。
改列类型(部分)支持
inplace创建/删除索引不建议会导致整表重建,因此不建议。
删除列不建议
copyoptimize 等不建议
DML点查主键查询支持主键查询可以快读定位数据。
二级索引查询有风险二级索引表可能需要回表,因此该操作具有一定的风险,需谨慎操作。
无索引查询不建议无索引查询会引起全表扫描,因此不建议。
范围查询主键查询有风险仅支持小范围的查询。大范围的查询或无索引的查询,可能会引起全表扫描,因此不建议。
二级索引查询有风险
无索引查询不建议
全表扫描不建议
写操作主键更新有风险支持更新主键数据和相关的二级索引,仅建议少量低频的写操作,大批量的更新会存在性能风险。
二级索引更新有风险
主键插入有风险
其他高并发读写操作不建议高并发的读写操作,可能会影响热表,导致无连接可用。

除以上场景外,分区表需特别注意查询更新是否带分区键。针对分区表的操作,若没有带分区键,MySQL 会遍历所有分区来查询满足条件的数据,容易带来性能风险。

DDL 限制

  • 普通表需要在 CREATE 或 ALTER 时通过设置 comment 调整表的冷热属性;分区表需要通过设置子分区的 comment 来调整冷热属性,不支持设置表级别的冷热属性,且不支持对包含二级分区的分区表做冷热转换。操作详情请参见归档冷数据

  • 仅支持在创建时对有明确分区的分区表指定冷热属性,因此不支持在创建时对 Hash 和 Key 类型的分区表指定子分区的冷热属性。只能在创建成功后,通过 ALTER 对子分区设置冷热属性。

  • 普通表转分区表时,表级别的冷热属性将被自动剔除,需要重新通过 ALTER 对子分区设置冷热属性。同理,分区表转普通表时也需要重新设置表级别的冷热属性。

    -- 创建一个分区表
    create table table_name (a int) partition by hash(a) partitions 4;
    
    -- 将其转换为普通表,并设置冷热属性
    alter table table_name comment="storage_policy=cold" remove partitioning;
    
  • 表的冷热属性以 comment 为准,可继承 comment 的操作,则可继承冷热属性。

    • 对于重建或创建表的 DDL,如果重建之后保留 comment 则可以继承属性,如果不保留 comment 则属性丢弃,需要重新设置。例如:

      • Hash 分区的分区表,optimize 之后会重建子分区,老的子分区的属性无法继承。

      • CREATE TABLE LIKE Hash 分区表,无 comment 可继承,则新分区表都没有设置属性。

      • CREATE AS 不会继承 comment,因此所有被创建出来的表都不会有属性。

    • Exchange 分区表和普通表会同步冷热属性。

      如下所示,在 Exchange 分区表和普通表后,此表 a_1 中的 p0 分区将变为冷数据,表 a_n 将变为热数据。

      -- 创建一个分区表
      create table a_1 (a int) partition by range columns(a) (
          partition p0 values less than (3) comment='storage_policy=hot',
          partition p1 values less than (5) comment='storage_policy=hot'
      )
      
      -- 创建一个普通表
      create table a_n (a int) comment="storage_policy=cold";
      
      -- Exchange
       alter table a_1 exchange partition p0 with table a_n;