全部产品
Search
文档中心

云原生数据仓库AnalyticDB:存储空间诊断

更新时间:Jul 30, 2024

若您的数据表存在数据倾斜、分区字段不合理或索引过多等问题,可以在空间诊断页面进行分区字段合理性诊断、分布字段倾斜诊断和复制表合理性诊断,也可以根据提供的冷热数据优化和索引优化的调优建议进行库表结构优化,从而降低集群使用成本,提高集群使用效率。

注意事项

  • 仅内核版本为3.1.4及以上版本的集群支持冷热表优化和索引诊断功能。

  • 冷热表优化和索引诊断功能的调优建议是根据数据和查询特征的历史数据分析得到的。当数据和查询特征稳定,则相关建议的有效性可持续;当数据和查询特征发生剧烈变化,则由历史数据分析得到的调优建议的参考价值明显下降。在使用该功能前,请您根据自身业务特征的变化情况考虑是否采用相应建议。

表诊断

表倾斜诊断

您可以在创建表时通过DISTRIBUTED BY HASH指定分布键,定义分布键之后,AnalyticDB for MySQL会对分布键的值进行哈希计算,根据计算得出的哈希值,将不同行的数据分散到不同分片(Shard)。如果数据在存储节点上分布不均,会导致磁盘空间倾斜,进而导致磁盘较早被锁定,影响数据写入。

诊断标准

AnalyticDB for MySQL会对行数超过1万行的表进行表倾斜诊断。数据倾斜计算方法如下:

  1. 去除一个最大的Shard,再计算平均Shard大小。

  2. 若某个Shard大于平均Shard大小*阈值或小于平均Shard大小/阈值,则认为该表存在倾斜。阈值默认值是3,取值范围是[0,10000000000],您可使用SET ADB_CONFIG RC_DATA_SKEW_THRESHOLD=Value;语句调整阈值。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 单击表诊断页签,查看表倾斜诊断的详细信息。

    存储节点磁盘使用率

    您可以通过图表查看各个存储节点的磁盘使用率,以此判断磁盘空间是否倾斜。若磁盘空间存在倾斜,您可根据下方Top10倾斜表中的具体信息,对倾斜表进行优化;若磁盘空间没有倾斜,但下方Top10倾斜表中有倾斜表,此时您也需要对倾斜表进行优化,以免影响集群查询性能。

    Top10倾斜表

    该区域会显示存在数据倾斜的表,这些表会按照表总数据量降序排列。您可以单击数据表对应操作列的查看倾斜详情,查看当前表在各个Shard上的行数,并以此判断当前数据表的倾斜程度。

优化方法

您可以通过以下三种方法解决:

冷热表优化

AnalyticDB for MySQL会对表访问次数进行分析,判断哪些表访问次数较少,并给出相关优化建议。您可根据优化建议,修改表的数据存储冷热分离策略。数据存储冷热分离的详情,请参见数据存储冷热分离

诊断标准

AnalyticDB for MySQL会对最近15天未访问,且访问率小于1%的热表给出调优建议。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 表诊断页签下,单击冷热表优化

  4. 可用优化建议页签下,单击右上角的开启,打开冷热表优化功能。若当前集群已开启冷热表优化功能,可跳过本步骤。

  5. 单击可用优化建议已采纳的建议,用户可以查看可用优化建议和已采纳的建议。

    参数

    说明

    建议ID

    优化建议的ID。

    SQL

    优化建议需要变更的表和相应定义等。

    优化类型

    冷热库表优化。

    具体优化建议

    针对优化类型,给出的具体优化建议。

    预期优化收益

    优化建议应用后带来的预期收益。

    说明

    预期优化收益是基于历史数据统计的预估值,非实时统计的准确值,仅供参考。

    具体操作指引

    您可以对当前优化建议采取一键应用操作。

    说明
    • 单击一键应用后,AnalyticDB for MySQL会直接将表的存储策略更改为COLD。若您想更改为MIXED或HOT,请执行ALTER语句手动修改存储策略。详情请参见存储策略

    • 一键应用,表示同意采纳该优化建议。一键应用后相应集群将执行SQL变更,同时该建议将出现在已采纳的建议页签中。

    • 一键应用的效果等同于在客户端执行相应SQL,不支持撤销操作,请谨慎使用。

    • 建议SQL下发后,需要数据表完成Build操作后方可完成应用,Build操作是数据库系统按一定规则自动触发的,未触发前,相应建议处于“运行中”的状态,触发后变为“已完成”状态。

复制表诊断

AnalyticDB for MySQL在创建表时可以指定数据的分布方式为复制方式(即DISTRIBUTED BY BROADCAST)。复制表会在每个Shard上存储一份相同的数据。若集群的查询业务存在大表JOIN小表(例如,A表为大表,B表为小表,A JOIN B),并且这类查询的并发较高时,您可以将数据量小的表创建为复制表,以减少该表在集群内部网络间的数据传输,提升并发性能。但是复制表的写入性能较差,也会占用大量的存储空间,进而影响AnalyticDB for MySQL集群的整体写入性能。

诊断标准

复制表单表大于2万条记录即视为不合理。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 表诊断页签下,单击复制表诊断

优化方法

您需新建普通表并迁移数据,具体操作请参见CREATE TABLE

分区诊断

分区表诊断

创建分区表时若分区字段设置不合理,则会导致以下问题:

  • 分区过大时(例如:按年做分区,每一年的数据会存储在一个分区内,此时分区数较少,但每个分区内的数据量较大),若该分区存在Build任务,会导致Build任务耗时长,占用较多的资源(存储节点CPU和磁盘IO资源),进而影响集群的稳定性。

  • 区过小时(例如:按小时做分区,每小时的数据会存储在一个分区内,此时分区数较多,但是每个分区内的数据量较少),集群会缓存大量分区信息,需占用较多的内存资源,同时也会导致查询数据时要扫描较多分区,进而影响查询性能。

怎样算合理的分区大小

分区大小是指分区的行数1,其合理性与Shard数2成正比。Shard数为N时,分区的行数在[100W * N, 500W * N]区间内,则认为分区大小合理。

例如,Shard数为64,如果分区的行数在[6400万, 32000万]范围内,则分区大小合理。

说明
  • 1查询分区的行数:SELECT partition_id, row_count FROM information_schema.kepler_partitions WHERE schema_name = '$DB' AND table_name ='$TABLE' AND partition_id > 0;

  • 2查询Shard数:SELECT COUNT(1) FROM information_schema.kepler_meta_shards;

诊断分区字段是否合理

诊断标准

如果表中有10%及以上的分区大小不合理,则认为该表的分区字段不合理。

例如,表有100个分区,如果存在10个及以上的分区大小不合理,则诊断结果为该表分区字段不合理。

操作步骤
  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 单击分区诊断页签,即可在分区表诊断区域查看是否存在分区不合理的表以及不合理分区的分区名称。

怎样调整分区大小到合理区间

当您在分区表诊断中发现不合理分区时,可以参考以下方法调整分区。

  • 如果分区行数未达到合理区间的下限,则认为分区过小,建议加大分区粒度。例如,Shard数为64,那么分区行数的合理范围在[6400万, 32000万]区间。如果分区的行数小于6400万,则分区过小,建议将按天分区改为按月分区。

  • 如果分区行数超过了合理区间的上限,则认为分区过大,建议降低分区粒度。例如,Shard数为64,那么分区行数的合理范围在[6400万, 32000万]区间。如果分区的行数大于32000万,则分区过大,建议将按月分区改为按天分区。

    修改分区粒度的方法,请参见变更分区函数格式

  • 如果表的总行数未达到合理区间的下限,且预估未来的数据增长也不会达到合理区间的下限,可以考虑创建一个非分区表,将该分区表的数据迁移到非分区表。

非分区表诊断

如果创建表时未指定PARTITION BY字段,则该表为非分区表。非分区表执行DML操作(INSERT、UPDATE、DELETE)时,容易触发全表Build,若非分区表数据过多,会导致Build时占用较多临时空间,进而导致节点磁盘使用率升高,磁盘被锁定。除此之外数据量较大的表Build时也会占用较多的磁盘IO资源和CPU资源,降低集群的整体性能。

诊断标准

非分区表数据超过10亿行时,则视为不合理。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 单击分区诊断页签,查看非分区表诊断信息。

优化方法

您需要新建分区表并迁移非分区表的数据,具体操作请参见CREATE TABLE

索引诊断

AnalyticDB for MySQL会分析数据索引的使用情况,对长期未使用的数据索引,将自动给出调优建议,您可以根据调优建议删除空闲索引,以降低数据索引的存储成本。

空闲索引诊断

诊断标准

最近15天未使用,且使用率小于1%的索引为空闲索引。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 单击索引诊断页签,查看空闲索引优化的详细信息。

  4. 可用优化建议页签下,单击右上角的开启,打开索引诊断功能。若当前实例已开启索引诊断功能,可跳过本步骤。

  5. 单击可用优化建议已采纳的建议,用户可以查看可用优化建议和已采纳的建议。

    参数

    说明

    建议ID

    优化建议的ID。

    SQL

    优化建议需要变更的表和相应定义等。

    优化类型

    索引优化。

    具体优化建议

    针对优化类型,给出的具体优化建议。

    预期优化收益

    优化建议应用后带来的预期收益。

    说明

    预期优化收益是基于历史数据统计的预估值,非实时统计的准确值,仅供参考。

    具体操作指引

    您可以对当前优化建议采取一键应用操作。

    说明
    • 数据索引删除后,如果查询再次使用该数据列进行过滤操作,查询时间会变长。

    • 一键应用,表示同意采纳该优化建议。一键应用后相应集群将执行SQL变更,同时该建议将出现在已采纳的建议页签中。

    • 一键应用的效果等同于在客户端执行相应SQL,不支持撤销操作,请谨慎使用。

    • 建议SQL下发后,需要数据表完成Build操作后方可完成应用,Build操作是数据库系统按一定规则自动触发的,未触发前,相应建议处于“运行中”的状态,触发后变为“已完成”状态。

主键索引诊断

诊断标准

若表中主键字段数大于3,且主键字段数达到表所有字段的一半,即说明主键索引过多。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表。在集群列表上方,选择产品系列,然后单击目标集群ID。

  2. 在左侧导航栏单击空间分析 > 空间诊断

  3. 单击索引诊断页签,查看主键过多诊断的详细信息。

  4. 可用优化建议页签下,单击右上角的开启,打开索引诊断功能。若当前集群已开启索引诊断功能,可跳过本步骤。

  5. 单击可用优化建议已采纳的建议,用户可以查看可用优化建议和已采纳的建议。

    参数

    说明

    建议ID

    优化建议的ID。

    SQL

    优化建议需要变更的表和相应定义等。

    优化类型

    索引优化。

    具体优化建议

    针对优化类型,给出的具体优化建议。

    预期优化收益

    优化建议应用后带来的预期收益。

    说明

    预期优化收益是基于历史数据统计的预估值,非实时统计的准确值,仅供参考。

    具体操作指引

    您可以对当前优化建议采取一键应用操作。

    说明
    • 数据索引删除后,如果查询再次使用该数据列进行过滤操作,查询时间会变长。

    • 一键应用,表示同意采纳该优化建议。一键应用后相应集群将执行SQL变更,同时该建议将出现在已采纳的建议页签中。

    • 一键应用的效果等同于在客户端执行相应SQL,不支持撤销操作,请谨慎使用。

    • 建议SQL下发后,需要数据表完成Build操作后方可完成应用,Build操作是数据库系统按一定规则自动触发的,未触发前,相应建议处于“运行中”的状态,触发后变为“已完成”状态。

相关API

API

说明

DescribeTablePartitionDiagnose

查看目标数仓版集群的分区诊断信息。

DescribeExcessivePrimaryKeys

查看目标湖仓版集群中主键过多的表。