更新时间:2024-06-11 GMT+08:00

GaussDB(DWS)中单表查询性能与哪些因素有关?

GaussDB(DWS)采用Shared-nothing架构,数据是被分布式存储,因此分布键设计、单表存储数据量、分区数量都会影响单表的整体查询性能。

  1. 分布键设计

    DWS默认会选择主键的第一列作为分布键。如果同时设置主键和分布键,则主键必须包含分布键。分布键决定了数据在各个分区之间的分布情况,如果分布键很好地分布在各个分区中,则可以使查询性能变得更好。

    分布列选择不当,在数据导入后有可能出现数据分布倾斜,进而导致某些磁盘的使用明显高于其他磁盘,极端情况下会导致集群只读。合理的选择分布键,对表查询的性能至关重要。此外,合适的分布键还可以使数据的索引更快地创建和维护。

  2. 单表存储数据量

    单表存储的数据量越大,查询性能就越差。当表中的数据量很大时,则需要考虑将数据进行分区存储。普通表若要转成分区表,需要新建分区表,然后把普通表中的数据导入到新建的分区表中。因此在初始设计表时,请根据业务提前规划是否使用分区表。

    对表进行分区,一般需要遵循以下原则:

    • 使用具有明显区间性的字段进行分区,比如日期、区域等字段。
    • 分区名称应当体现分区的数据特征。比如关键字+区间特征。
    • 将分区上边界的分区值定义为MAXVALUE,以防止可能出现的数据溢出。
  3. 分区数量

    利用分区,可以将表和索引划分为一些更小、更易管理的单元。大幅减少搜索空间,从而提升访问性能。

    使用分区数量会影响查询的性能。如果分区数量太小,则可能会使查询性能下降。

    DWS支持范围分区(Range Partitioning)和列表分区(List Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。其中,列表分区(List Partitioning)仅8.1.3及以上集群版本支持。

因此,在设计数据仓库时,需要考虑这些因素并进行实验来确定最佳设计方案。