数据仓库服务 GAUSSDB(DWS)-HStore表使用优秀实践:HStore表的使用要求与建议

时间:2024-10-10 20:51:47

HStore表的使用要求与建议

  • 参数设置

    依赖后台常驻线程对HStore表进行MERGE清理操作,才能保证查询性能与压缩效率,使用HStore表务必设置相关GUC参数,推荐的参数值如下:

    autovacuum_max_workers_hstore=3

    autovacuum_max_workers=6

    autovacuum=true

    enable_col_index_vacuum=on

  • 入库建议(推荐使用HStore_opt表)
    HStore_opt表入库建议:
    1. update入库性能差,建议修改为upsert;
    2. delete入库,确定计划走索引扫描即可,用JDBC batch方式入库最佳;
    3. upsert入库,无并发冲突下开启enable_hstore_nonconflict_upsert_optimization,其他场景都关闭;enable_hstore_nonconflict_upsert_optimization即可,会自动选择最优路径;
    4. merge into入库只有在单次入库数据量超过100W/dn,且无并发数据保证无重复的情况下,建议使用。
  • 点查建议(推荐使用HStore_opt表)

    HStore_opt表点查建议:

    1. 在等值过滤条件使用最多且distinct值分布相对均匀的一个列上创建二级分区(distinct值的分布过于倾斜或者个数太少的列不要创建二级分区);
    2. 除了二级分区之外的等值过滤列,如果过滤条件涉及的列在查询中基本固定,使用cbtree索引,创建索引的列数不要超过5列;
    3. 除了二级分区之外的等值过滤列,如果过滤条件涉及的列在不同查询中变化,使用gin索引,创建索引的列数不要超过5列;
    4. 所有涉及等值过滤的字符串列,都可以建表时指定bitmap索引,不限列数,后续不可修改;
    5. 时间范围过滤的列,指定为分区列;
    6. 点查返回数据量超过10W/dn的场景,索引扫描很可能不如非索引扫描,建议使用guc参数enable_seqscan对比测试下性能,灵活选择。
  • 索引相关

    索引会占用额外的空间,同时带来的点查性能提升有限,所以HStore表只建议在需要做Upsert或者有点查(这里指唯一性与接近唯一的点查) 的诉求下创建一个主键或者btree索引。

  • MERGE相关

    由于HStore表依赖后台autovacuum来将操作MERGE到主表,所以入库速度不能超过MERGE速度,否则会导致delta表的膨胀,可以通过控制入库的并发来控制入库速度。同时由于Delta表本身的空间复用受oldestXmin的影响,如果有老事务存在可能会导致Delta空间复用不及时而产生膨胀。

support.huaweicloud.com/bestpractice-dws/dws_05_0109.html