
# 技术原理
#### 核心机制
图1核心机制   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590360878.png "点击放大")
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
由于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用于在业务规模扩展及数据量增长过程中，当集群性能与存储资源达到瓶颈时，通过新增主机节点提升集群整体处理能力和存储容量。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 建议用户使用此接口完成扩容加节点和数据重分布操作。
    

- gs_redis_bucket gs_redis_bucket用于对扩容加节点后的集群中hashbucket表执行数据重分布，主要由OM脚本调用执行。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 不建议用户直接调用此接口，建议用户使用gs_expand工具完成数据重分布操作。
    

- gs_redis gs_redis用于对扩容后的集群中非hashbucket表执行数据重分布，同样由OM脚本调用执行。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 不建议用户直接调用此接口，建议用户使用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回滚状态。仅支持在扩容期间调用；仅支持管理员权限用户查询。                               |
     
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 详细描述请参见《参考》中"SQL参考 \> 函数和操作符 \> 系统管理函数 \> bucket系统函数"章节。
  
  - 不建议用户直接调用以上系统函数接口，建议用户使用gs_expand工具完成扩容加节点和数据重分布操作。
    

- 表 以下表的创建发生在进行逻辑扩容操作期间。
  
  | 表名                    | 说明                            |
  |:---|:---|
  | redis_progress_detail | 记录非hashbucket表扩容重分布执行时间。      |
  | redis_status          | 记录集群重分布总体进度。                  |
  | pgxc_redistb          | 记录需要重分布的用户表的信息，扩容重分布结束后会自动删除。 |
     
  
 
