GaussDB(DWS)|扩容之后的数据重分布【绽放吧!GaussDB(DWS)云原生数仓】
【摘要】 分布式数据库中数据的均衡分不在各个节点是其性能的关键,扩容是分布式数据库的基础能力,如何快速的在扩容之后让数据分布到各个节点上?
作为分布式数据库扩容是其基础功能,而扩容后数据的均衡分布又是其最基础的要求。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)