GaussDB(DWS)|扩容之后的数据重分布【绽放吧!GaussDB(DWS)云原生数仓】

举报
nullptr_ 发表于 2023/11/01 09:21:20 2023/11/01
【摘要】 分布式数据库中数据的均衡分不在各个节点是其性能的关键,扩容是分布式数据库的基础能力,如何快速的在扩容之后让数据分布到各个节点上?

作为分布式数据库扩容是其基础功能,而扩容后数据的均衡分布又是其最基础的要求。Gaussdb(DWS)的重分布功能简单高效,提供了重分布操作命令并且有丰富的重分布策略设置,通过不同阶段的重分布策略调整,能快速的完成数据的重分布操作。

扩容操作

gs_expend是Gaussdb(DWS)的扩容入口。操作流程如下

# 环境检查
./gs_preinstall 

# 节点初始化
gs_expand -t dilatation -X XMLFILE

# 重分布
gs_expand -t redistribut

重分布参数介绍

--vacuum-full                重分布完成后是否对表执行vacuum full操作
--fast-redis                 执行快速数据重分布 
--parallel-jobs=NUMBER       执行重分布的worker数量
--build-redistb              创建pgxc_redistb表,但不进行重分布,此表中记录了本次重分布所有需要进行重分布的表,用户可指定表里的redis_order字段来决定表的重分布顺序。
--redis-mode=MODE            重分布的模型,默认为离线(read-only),可以指定在线(inset)
--priority-tables=FILE      指定文件列出将首先重新分配的表。指定表完成重分布后,再开始其它表的重分布流程
                            (T文件格式为: database schema tablename)
--exclude-tables=FILE       文件中指定不重分布的表
                            (文件格式为: database schema tablename)
--failure-limit=NUMBER       当重分布失败的表数量超过该值时推出重分布流程
--schedule-path              是否使用调度程序模式执行重分发。

重分布过程中的表

  • pgxc_redistb 当前数据库的表处理情况
tpcds1000xcpl=# \d pgxc_redistb
          Table "public.pgxc_redistb"
     Column      |       Type       | Modifiers
-----------------+------------------+-----------
 relname         | name             | not null
 nspname         | name             | not null
 pcrelid         | oid              |
 pclocatortype   | character(1)     |
 pchashalgorithm | smallint         |
 pchashbuckets   | smallint         |
 pgroup          | name             |
 redistributed   | character(1)     |
 redis_order     | integer          |
 pcattnum        | int2vector       |
 nodeoids        | oidvector_extend |
 internal_mask   | integer          |
 table_size      | bigint           |

  • redis_config 重分布配置
postgres=# select * from redis_config;
      attributename       | attributetype | attributevalue
--------------------------+---------------+----------------
 isPriorityChanged        | bool          | false
 tableSelectionMethod     | string        | default(决定并发类型)
 enableParallelInsert     | bool          | true
 enableParallelIndex      | bool          | true
 enableReentrant          | bool          | true
 maxWorkerNum             | integer       | 8
 defaultInsertParallelNum | integer       | 8
 columnSuffix             | integer       | 1698714614
 defaultIndexParallelNum  | integer       | 8
(9 rows)

- tableSelectionMethod,通过`update redis_config set attributeValue = xx where attributeName = 'tableSelectionMethod' ;`直接进行修改
    - default 默认情况大表处理并发为三分之的parallel-jobs
    - large 大表优先,所有并发线程先处理大表
    - small 小表优先,所有并发线程先处理小表
- 更新并发度 `update redis_config set attributeValue=xx where attributeName='maxWorkerNum'`
  • redis_progress 重分布过程进度查询
postgres=# select * from redis_progress;
             name             |      value
------------------------------+-----------------
 Bytes Left                   | 2783 GB
 Tables Expanded              | 77
 Estimated Expansion Rate     | 2207 MB/s
 Tables Left                  | 8
 Estimated Time to Completion | 00:21:31.036947
 Bytes Done                   | 1570 GB
(6 rows)

  • redis_progress_detail 每张表的重分布执行情况
postgres=# select * from redis_progress_detail;
 dbname | table_name | start_time | finish_time | cost | size
--------+------------+------------+-------------+------+------


  • redis_status 重分布执行过程
         status          |         updated         | base_disk_size | target_disk_size
-------------------------+-------------------------+----------------+------------------
 REDISTRIBUTION STARTED  | 2023-10-31 10:49:31.088 |                |
 REDISTRIBUTION SHUTDOWN | 2023-10-31 11:15:56.968 |                |
 REDISTRIBUTION SETUP    | 2023-10-31 10:49:30.101 |                |
 REDISTRIBUTION COMPLETE | 2023-10-31 11:15:55.171 |                |

重分布逻辑

通过工具gs_redis完成重分布操作。此过程会根据设置的parrallel-jobs来决定执行重分布的线程,其粒度为表,每个线程执行单一表的重分布流程。如果遇到大表(超过10G)则会校验表是否为分区表,如果是分区表则,开启子线程,处理各个分区数据

查看数据库的大表

select relname from pg_class where relpages>10G/8192

我正在参加【有奖征文 第27期】绽放吧!GaussDB(DWS)云原生数仓!(https://bbs.huaweicloud.com/blogs/412962)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。