跳转至

重分布表

重分布表

重新分布表让现有数据在新扩容后的集群上得以平衡。

在创建了扩容schema后,可以使用scexpand在整个系统重分布表。应该在低峰期运行,这样该工具的CPU使用率和表锁对其他操作的影响会最小。还要对表进行排名,先对最大或者最重要的表进行重新分布。

注意: 在重新分布数据时,SeaboxMPP数据库必须运行在生产模式中。SeaboxMPP数据库不能处于受限模式或者Coordinator模式中。不能指定scstart选项-R或者-m来启动SeaboxMPP数据库。

当表重新分布正在进行中时,任何新创建的表会按照普通操作那样被分布在所有的节点上。查询也能访问所有的节点,即使相关的数据还没有被完全分布在新节点上的表中也行。正在被重新分布的表或者分区会被锁定并且不可读写。 当其重新分布完成后,常规操作才会继续。

表重分布排名

对于大型的系统,用户可以控制表重新分布的顺序。 调整扩容schema里的rank值可以优先做重度使用的表并最小化对性能的影响。可用的空闲磁盘空间可能会影响表的排名,参见在大规模SeaboxMPP系统中管理重新分布

要通过在scexpand.status_detail中更新rank值来为重新分布对表排名,用ssql或者另一个被支持的客户端连接到SeaboxMPP数据库。

可通过以下命令更新scexpand.status_detail

=> UPDATE scexpand.status_detail SET rank=10;

=> UPDATE scexpand.status_detail SET rank=1 WHERE fq_name = 'public.lineitem';
=> UPDATE scexpand.status_detail SET rank=2 WHERE fq_name = 'public.orders';

这些命令把所有表的优先级降低到10,然后把排名1分配给lineitem并且把排名2分配给orders

当表的重新分布开始时,lineitem会首先被重新分布,接着是ordersscexpand.status_detail中所有的其他表。

要从重新分布中排除一个表,将它从scexpand.status_detail中移除即可。

使用scexpand重分布表
  1. 作为将要运行用户的SeaboxMPP数据库系统的用户(例如seabox)登入到coordinator节点。

  2. 运行scexpand工具。用户可以使用-d或者-e选项来定义扩展会话时限。

    例如,要运行该工具最多60个连续的小时:

    $ scexpand -d 60:00:00
    

    该工具会重分布表,直到schema中的最后一个表完成或者它达到了指定的持续时间或者结束时间。当会话结束时,scexpand会在scexpand.status中更新状态和时间。

监控表的重分布

用户可以在表重新分布处理的过程中查询扩展方案。

视图scexpand.expansion_progress提供了一个当前进度摘要,包括估计的表重新分布率以及估计的完成时间。

用户可以查询表scexpand.status_detail来得到每个表的状态信息。

  • 查看扩容状态

有两种方式可以查看扩容的状态。 1. 通过scexpand –showstatus查看。这个命令可以查看扩缩容的类型,以及在扩缩容的若干步骤中,哪些完成了,哪些还未完成,如:

seabox@seabox-mpp]$ scexpand --showstatus
type: expand
+-----------------------------------+-------------+
| step                              | status      |
+-----------------------------------+-------------+
| read_inputfile                    | finished    |
| system_check                      | not started |
| executor_basebackup               | finished    |
| lock_catalog                      | finished    |
| restart_executor_after_basebackup | started     |
| cleanup_executors                 | not started |
| update_catalog                    | not started |
| update_coor_expand_version        | not started |
| unlock_catalog                    | not started |
| setup_schema                      | not started |
| prepare_schema                    | not started |
| update_new_mirrors_status         | not started |
| sync_new_mirrors                  | not started |
| update_new_executor_status        | not started |
| expand_data                       | not started |
+-----------------------------------+-------------+

  1. 通过系统表查询具体的表的扩缩容状态:

在第一个表完成重新分布后,scexpand.expansion_progress会计算其估计值并且基于所有表的重新分布比率刷新它们。每次用户用scexpand开始一次表重新分布会话时计算都会重新开始。要监控进度,可以用ssql或者另一种受支持的客户端连接到SeaboxMPP数据库,然后用下面这样的命令查询scexpand.expansion_progress

=# SELECT * FROM scexpand.expansion_progress;
             name             |         value
------------------------------+-----------------------
 Bytes Left                   | 5534842880
 Bytes Done                   | 142475264
 Estimated Expansion Rate     | 680.75667095996092 MB/s
 Estimated Time to Completion | 00:01:01.008047
 s Expanded              | 4
 s Left                  | 4
(6 rows)
  • 查看表状态

scexpand.status_detail存储着方案中每一个表有关的状态、最近更新时间和更多情况。

要查看一个表的状态,可以用ssql或者另一种受支持的客户端连接到SeaboxMPP数据库,然后查询scexpand.status_detail

=> SELECT status, expansion_started, source_bytes FROM
scexpand.status_detail WHERE fq_name = 'public.sales';
  status   |     expansion_started      | source_bytes
-----------+----------------------------+--------------
 COMPLETED | 2017-02-20 10:54:10.043869 |   4929748992
(1 row)
重分布并发控制

重分布的并发控制可以通过通过两种方式调整: 1. 启动时,指定并发度

scexpand -n 4
通过参数 -n,即可设定本次扩缩容的并行度

  1. 工具运行时,动态调整

重分布并发是指同时重分布多少张表(分区表算一张表)。并发度高,可提升重分布的效率,并发度低,可以减轻重分布对集群业务的冲击。DBA可以根据集群的负载及需要,灵活调整重分布的并行度。

DBA可有以下方式设定并行度:

  • 启动命令时,设定执行并行度。参数样式为scexpand -n X或者scexpand –parallel=X,X即为并行度。X取值范围[0, 128], 默认4

  • 在重分布运行过程中,动态设定并行度。执行命令为scexpand -n X –scdcs或者scexpand –parallel=X –scdcs。这个命令增加了参数–scdcs,意思是仅做写入scdcs的动作。此命令将并行度写入scdcs中以后,正在运行的重分布程序会实时监测scdcs中的配置,一旦配置有变化,运行中重分布程序会立即采用新的并发度。

  • 如果在启动工具时,就配置了并行度,则工具以此并行度为准,并将其写入scdcs中。在启动之后,如果scdcs中又写入了新值,则又以新的并行度为准

  • 工具启动时,用户没有设定并行度,则以scdcs中的值为准;如果scdcs中没有设定,则使用默认值4

  • 新的并发度设置仅对新开启的任务有作用,例如,当前有5个任务在运行,并行度由5修改为3,那么只有等这5个任务中的3个已完成,才能再开启新的任务

重分布暂停继续

重分布的并行度支持设为0。当并行度设为0时,就不再开启新的任务了。当已开启的重分布任务都完成后,就没有重分布任务运行了。这样,就实现了重分布的暂停。使用的命令为scexpand -n 0 –scdcs或者scexpand –parallel=0 –scdcs, 即将并行度0写入scdcs。

如果要继续执行重分布,则可执行scexpand -n X –scdcs或者scexpand –parallel=X –scdcs,取X为大于0的值。重分布工具读取到新的配置后,则按照新的并行度开启重分布任务,从而实现重分布的继续运行