更新时间:2026-07-28 GMT+08:00
分享

技术原理

核心机制

图1 核心机制

由于gs_expand工具集成了物理扩容和逻辑扩容功能,因此图示中包含逻辑扩容相关内容。建议用户在物理扩容操作时避免数据库内出现bucket表与非bucket表混用情况。

性能指标

集群数据节点读带宽500MB/s、写带宽800MB/s,配置万兆网络。当每个DN独占磁盘、业务负载低峰且不做资源管控(资源管控级别为f,表内并发度8,扫描并发度4)时,单DN分片1TB数据翻倍扩容耗时如下:

  • 普通表:3小时完成。
  • hashbucket表:2小时完成(每批bucket数量1024,单次bucket上线最大1024)。

接口介绍

  • gs_expand

    gs_expand用于在业务规模扩展及数据量增长过程中,当集群性能与存储资源达到瓶颈时,通过新增主机节点提升集群整体处理能力和存储容量。

    • 建议用户使用此接口完成扩容加节点和数据重分布操作。
  • gs_redis_bucket

    gs_redis_bucket用于对扩容加节点后的集群中hashbucket表执行数据重分布,主要由OM脚本调用执行。

    • 不建议用户直接调用此接口,建议用户使用gs_expand工具完成数据重分布操作。
  • gs_redis

    gs_redis用于对扩容后的集群中非hashbucket表执行数据重分布,同样由OM脚本调用执行。

    • 不建议用户直接调用此接口,建议用户使用gs_expand工具完成数据重分布操作。
  • 系统函数

    函数名称

    说明

    gs_redis_get_plan

    获取完整的迁移计划。只支持在扩容期间调用;只支持管理员权限用户查询;只支持CN上调用。

    gs_redis_get_bucket_statistics

    获取日志流传输状态。只支持在扩容期间调用;只支持管理员权限用户查询。

    gs_redis_set_distributed_db

    设置当前正在hashbucket重分布的数据库。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_hashbucket_update_segment_header

    更新当前数据库所有hashbucket表的header。只支持在扩容期间调用;只支持管理员权限用户查询;只支持CN上调用。

    gs_redis_local_get_segment_header

    获取段页式表header。只支持DN上调用。

    gs_redis_local_update_segment_header

    更新段页式表header。只支持DN上调用。

    gs_redis_hashbucket_update_inverse_pointer

    更新当前数据库所有hashbucket表本批次bucket的反向指针。只支持在扩容期间调用;只支持管理员权限用户查询;只支持CN上调用。

    gs_redis_local_get_inverse_pointer

    获取反向指针。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_local_update_inverse_pointer

    记录并更新反向指针的Xlog。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_local_set_hashbucket_frozenxid

    修改hashbucket表在系统表中的relfrozenxid64值。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_set_hashbucket_frozenxid

    修改新DN节点hashbucket表在系统表中的relfrozenxid64值。只支持在扩容期间调用;只支持管理员权限用户查询;只支持CN上调用。

    gs_redis_set_nextxid

    修改DN节点next_xid值。只支持在扩容期间调用。只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_set_csn

    修改DN节点next_csn值。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用;只支持在GTM_FREE模式下调用。

    gs_redis_check_bucket_flush

    查询RTO回放是否完成私有buffer的全量刷盘。只支持在扩容期间调用;只支持管理员权限用户查询。

    gs_redis_get_flush_page_lsn

    查询bucket扩容回放的刷页信息。暂不支持发布版本调用;只支持在扩容期间调用;只支持管理员权限用户查询。

    gs_redis_show_bucketxid

    查询指定bucket对应的bucketxid。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_drop_bucket_files

    删除源节点已经物理搬迁的文件。只支持在扩容期间调用;只支持管理员权限用户查询;只支持CN上调用。

    gs_redis_local_drop_bucket_files

    删除对应的bucket list。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_local_drop_bucket_files

    用于rangebucket表删除对应数据库的bucket list。只支持在扩容期间调用;只支持管理员权限用户查询;只支持DN上调用。

    gs_redis_get_undo_state

    获取扩容重分布期间的Undo回滚状态。仅支持在扩容期间调用;仅支持管理员权限用户查询。

    • 详细描述请参见《参考》中“SQL参考 > 函数和操作符 > 系统管理函数 > bucket系统函数”章节。
    • 不建议用户直接调用以上系统函数接口,建议用户使用gs_expand工具完成扩容加节点和数据重分布操作。
  • 以下表的创建发生在进行逻辑扩容操作期间。

    表名

    说明

    redis_progress_detail

    记录非hashbucket表扩容重分布执行时间。

    redis_status

    记录集群重分布总体进度。

    pgxc_redistb

    记录需要重分布的用户表的信息,扩容重分布结束后会自动删除。

相关文档