# 集群重分布
#### 功能介绍
集群重分布是集群扩容后的一项重要且耗时的数据迁移任务，集群扩容前业务数据按照原有分布策略存储在原有节点上，扩容后新增空的可用节点暂时没有数据，此时系统将原有节点上的数据按照新的分布策略重新均匀分配到所有节点（包括新增节点）上，以确保数据均匀分布和查询性能最优，该过程称为数据重分布。重分布完成后，可显著提升性能和系统负载均衡能力。
默认情况下，扩容完成后系统将自动触发重分布任务，为增强扩容重分布整个流程的可靠性，可以选择在扩容时关闭自动重分布功能，待扩容成功后再手动执行重分布任务，在这种分段模式下，扩容和重分布均可独立失败重试。重分布模式和扩容模式一致，如果集群是在线扩容，重分布默认也是在线重分布。在重分布开始前或重分布暂停过程中，支持对未重分布的表按照**Schema或表维度**设置重分布优先级。
#### 重分布模式
DWS支持[离线重分布]和[在线重分布]两种模式，详情请参见[表1]。
 表1重分布模式说明 
| 重分布模式  | 说明                                     | 使用场景              |
|:---|:---|:---|
| 在线重分布  | 重分布期间支持部分读写操作和DDL操作，业务影响较小。           | 适用于需要业务持续运行的场景。       |
| 离线重分布 | 重分布期间对正在重分布的表加共享锁，仅支持只读查询，不支持DDL和DML写操作。 | 适用于可接受业务短暂中断的场景。 |
   
#### 约束与限制
- 重分布功能8.1.1.200及以上集群版本支持。
- 查看重分布详情功能仅8.1.1.200及以上集群版本支持，其中数据表重分布进度详情仅8.2.1及以上集群版本支持。
- 只有在扩容之后，集群任务信息为"待重分布"状态时才能手动使用重分布功能，其他时段该功能不可使用。
- 在扩容阶段也可以选择重分布模式的高级配置，详情参见[扩容集群](https://support.huaweicloud.com/mgtg-dws/dws_01_0023.html#ZH-CN_TOPIC_0000002617625167__section31992607155626)。
- 重分布队列的排序依据表的relpage（磁盘页面数）大小进行，为确保relpage统计值正确，建议在重分布之前对需要重分布的表执行ANALYZE操作，以更新表的统计信息。
- **离线重分布约束如下：**
  - 离线重分布模式下数据库不支持DDL和DCL操作，正在重分布的表只支持简单的DQL（只读查询）操作。
  
  - 表重分布期间会对表加共享锁（Share Lock），所有INSERT、UPDATE、DELETE操作和表DDL操作都会长时间阻塞，可能会出现等锁超时情况。在重分布执行过程中，**用户应** **避免执行超过20分钟的查询**（重分布执行时申请写锁的默认时间为20分钟）。否则可能导致重分布因等待加锁超时而失败。
   
- **在线重分布约束如下：**
  - 在线重分布模式下数据库支持部分DDL和DCL操作。
  
  - 正在重分布的表支持INSERT、DELETE、UPDATE和部分DDL语法。支持功能如下：
    - 可执行正在重分布的本地表的INSERT、DELETE、UPDATE、MERGE INTO、OVERWRITE、UPSERT业务。
    
    - 可执行正在重分布的本地表跨节点组的关联查询业务。
    
    - 可执行正在重分布的本地表的重命名、修改Schema、DROP、TRUNCATE、TRUNCATE-PARTITION业务。
     
  
  
  
  - 正在重分布的表不支持功能如下：
    - 不支持执行ALTER TABLE语句，典型场景包括增加/删除字段，增加/删除分区等（TRUNCATE PARTITION除外）。
    
    - 不支持创建、修改和删除索引（Index）。
    
    - 不支持对表执行VACUUM FULL和CLUSTER语句。
    
    - 不支持修改字段依赖的SEQUENCE对象，包括创建和修改字段依赖的SEQUENCE对象，典型的语句是CREATE/ALTER SEQUENCE ... OWNED BY。
    
    - 超过996列的宽表，表重分布期间不支持UPDATE和DELETE语句（执行会报错），但允许执行SELECT和INSERT语句。
    
    - 整个重分布过程中不支持创建、删除或修改Database对象和Tablespace对象。
    
    - 重分布过程是以表为单位执行，如果用户执行交换分区（Exchange Partition）操作，当分区表和待交换的非分区表中有一个已完成重分布，另一个没有完成重分布时，由于两个表属于不同的节点组，这种情况不支持交换分区，需要等两个表都重分布完之后才能执行交换分区。
     
   
- 查看重分布详情功能只有集群处于重分布中、重分布失败或者重分布暂停状态下才能使用，其他时段该功能不可使用，且相关信息展示会有一定延迟。
 
 #### 离线重分布
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏选择**"集群 \> 集群列表"**。默认显示用户所有的集群列表。
3. 集群列表中，在指定集群所在行的"操作"列，选择**"** **更多 \> 节点变更 \> 重分布"** ，弹出右边窗口显示重分布页面，页面将显示**当前资源详情** 和**重分布配置**模块。
4. 用户可参考**当前资源详情** 模块信息在**重分布** 栏配置重分布相关信息，并在**进度详情** 模块可查看重分布的进度详情。
   
   表2重分布配置参数说明 
   | 参数名称   | 参数描述                                                                        |
   |:---|:---|
   | 重分布并发配置 | 设置同时执行重分布的表数量，可配置并发数在1\~200之间，默认值为4。并发数越大，重分布速度越快，但对集群资源的占用也越多，请根据集群负载情况合理设置。 |
   | 重分布模式    | 选择默认的**"离线模式"**。                                                              |
   | 优先级     | 根据需求可单击**"优先级调整"**调整重分布过程中的优先级（schema或表维度），设置排序优先级后，系统将按照设置的重分布顺序依次进行重分布。   |
      
   
   
5. 确认无误后单击**"提交"**开始重分布任务。
 
 #### 在线重分布
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏选择**"集群 \> 集群列表"**。默认显示用户所有的集群列表。
3. 集群列表中，在指定集群所在行的"操作"列，选择**"更多 \> 节点变更 \> 重分布"** ，弹出右边窗口显示重分布页面，页面将显示**当前资源详情** 和**重分布配置**模块。
4. 用户可参考**当前资源详情** 模块信息在**重分布** 栏配置重分布相关信息，并在**进度详情** 模块可查看重分布的进度详情。
   
   表3重分布配置参数说明 
   | 参数名称   | 参数描述                                                                         |
   |:---|:---|
   | 重分布并发配置 | 设置同时执行重分布的表数量，可配置并发数在1\~200之间，默认值为4。并发数越大，重分布速度越快，但对集群资源的占用也越多，请根据集群负载情况合理设置。 |
   | 重分布模式 | 选择**"在线模式"**。                                                                    |
   | 优先级      | 根据需求可单击**"优先级调整"**调整重分布过程中的优先级（schema或表维度），设置排序优先级后，系统将按照设置的重分布顺序依次进行重分布。     |
      
   
   
5. 确认无误后单击**"提交"**开始重分布任务。
 
#### 查看重分布详情
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏选择**"** **集群 \> 集群列表"**。默认显示用户所有的集群列表。
3. 集群列表中，在指定集群所在行的"任务信息"列，单击**"查看详情"**。
4. 在**"查看重分布详情"** 页面可以查看到当前集群的重分布模式、重分布进度、数据表重分布详情等监控信息，并可对重分布进行暂停和恢复操作。重分布暂停状态下还可设置重分布优先级，修改重分布并发数等。
   
   - 重分布中会显示重分布状态、重分布配置、重分布整体进度以及指定数据库下所有数据库表的重分布详情。查看数据表重分布详情时，**必须先指定一个数据库**，且支持按照表的重分布状态和表名进行筛选。由于重分布机制的原因，若某数据库下所有表完成重分布，页面将不再展示该数据库的详细信息。
   
   - 如果此次重分布是由**从集群外部扩容到已有的逻辑集群**触发的，还将显示扩容后Bucket（数据桶）分裂信息，使重分布后数据可以均匀分布在所有节点上。
   
   
   
   
5. 重分布暂停状态下，可设置重分布优先级（支持按schema或表维度），设置排序优先级后，系统将按照设置的重分布顺序依次进行重分布。用户也可在重分布开始前设置重分布优先级。 
   图1重分布优先级   
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002617505405.png "点击放大")
   
   
6. 重分布过程中单击**"修改"** 可动态调整重分布并发数。**8.1.0及以下集群版本不支持动态调整，需先暂停重分布后再修改。**
7. 重分布完成后会显示重分布进度统计信息（完成数据量、剩余数据量、完成表数量、剩余表数量、重分布过程中的速率）。
 
