人大金仓分析型数据库系统扩容(三)

目录

规划表重分布

管理重分布

重分布方法

重分布追加优化和压缩表

重分布分区表 

重分布有索引的表


规划表重分布

        表重新分布会在系统在线时被执行。 对于很多系统,表重新分布会在一个安排在低利用率时期执行的单一gpexpand会话中完成。 更大的系统可能会要求多个会话并且设置表重新分布的顺序来最小化对性能影响。 如果可能的话,尽量在一个会话中完成表重新分布。表重新分布的性能影响取决于一个表的尺寸、存储类型以及分区设计。 对于任何给定的表,用gpexpand重新分布需要消耗和一次CREATE TABLE AS SELECT操作相同的时间。 在重新分布一个TB级别的表时,扩容工具会使用许多可用的系统资源,这可能会影响其他数据库负载的查询性能。

管理重分布

        在规划重新分布阶段时,要考虑重新分布期间在每个表上取得的ACCESS EXCLUSIVE锁的影响。 一个表上的用户活动可能会延迟它的重新分布,而且表在重新分布期间对用户活动不可用。可以通过调整ranking来控制表重分布的顺序,操作重分布顺序有助于调整有限的磁盘空间,并尽快恢复高优先级查询的最佳查询性能。

重分布方法

        数据库扩容的时候有两种方法重分布数据:

  • rebuild - 建立一个新表,把所有数据从旧表复制到新表,然后替换旧表。 这是默认行为。rebuild方法和使用CREATE TABLE AS SELECT命令创建一个新表类似。 在数据重分布期间,会在表上加ACCESS EXCLUSIVE锁
  • move - 扫描所有数据并做UPDATE操作来移动需要移动的行到不同节点实例上。 在数据重分布过程中,会在表上加ACCESS EXCLUSIVE锁。 一般来说,这个方法需要更少的磁盘空间,但是它在表里留下了很多被淘汰的行,可能在数据重分布后需要VACUUM操作。 另外,此方法一次更新一行索引,这会使它比使用CREATE INDEX命令重建索引更慢

         如果系统由充裕的空闲磁盘空间(要求用来存储最大表的一份拷贝),可以通过首先重新分布查询使用最多的重点表来尽快恢复最优的查询性能。 为这些表分配高的排名,并且在系统使用量低的时候安排重新分布操作。 一次运行一个重新分布处理,直到大的或者关键的表被重新分布完。如果现有的主机磁盘空间有限,可以先重新分布较小的表(例如维度表)来腾出空间存储最大表的一份拷贝。 由于每个表会被重新分布到被扩容后的阵列上,在原始节点上的可用磁盘空间会增加。 当在所有节点上存在足够的空闲空间以存储最大表的一份拷贝后,就可以重新分布大的或者关键的表了。 大表的重新分布要求排他锁,请把这种过程安排在非峰值时段。

重分布追加优化和压缩表

        gpexpand以与堆表不同的速率重新分布未压缩和压缩的追加优化表。 压缩和解压数据所需的CPU能力会导致增加对系统性能影响。 对于具有类似数据的类似尺寸的表,可以发现如下的总体性能区别:

  • 扩展未压缩的追加优化表比堆表快10%
  • 定义为使用数据压缩的追加优化表以比未压缩的追加优化表的扩展速率更慢,可能慢80%
  • 使用了ZFS/LZJB等数据压缩的系统需要更长时间重新分布

重分布分区表 

        因为该扩展工具可以处理一个大型表上的每个分区,一个有效的分区设计能降低表重新分布的性能影响。 只有一个分区表的子表会不被设置为随机分布策略。一次只对一个子表应用重新分布所需的读/写锁。

重分布有索引的表

         因为gpexpand工具必须在重新分布之后重建每个表的索引,复杂的索引会带来很大的性能影响。 在建立有很多索引的系统中,表的重新分布要慢很多。

你可能感兴趣的:(数据库)