随着额外的数据被收集以及现有数据的保留时间增加,数据仓库会随着时间而增大。 有时,可能需要额外的计算能力(CPU)来适应新增加的分析项目。 尽管在系统被初 始定义时就留出增长的空间是最为明智的,但是通常不太可能在提前太多在资源上准备。 因此,用户应该定期地执行一次数据库扩容项目。在用户增加资源到系统时,得到的容量和性能就好像该系统一开始就用增加后的资源实现一样。 和要求大量停机时间来转储和恢复数据的数据仓库系统不同,扩容一个数据库系统是一种最小化停机时间的分阶段处理。 在数据被重新分布时,常规和特别负载可以继续并且事务一致性也能被维护。 管理员可以安排分布活动以适合正在进行的操作并且可以按需暂停 和继续。 表可以被排名,这样数据集可以以一种优先序列的方式被重新分布,从而确保关键性的负载能很快从扩容后的能力受益,或者释放所需的磁盘空间来重新分布非常大的表。
通过增加节点实例和节点主机来扩容数据库,用户可以最小化停机时间。当用户扩容数据库时,会期待如下特性:
在准备好新的硬件平台并且设置好它们的网络之后,配置它们的操作系统并且使用的工具运行性能测试。 数据库软件发布包括一些工具,这些工具有助于在开始扩容的软件阶段之前对新的服务器进行测试和拷贝。一旦新服务器被安装并且测试,数据库扩容处理的软件阶段就开始了。
扩容过程的第一步是准备数据库系统: 添加新节点的主机并初始化新的节点实例。 此阶段可以安排在低活动期间进行,以避免中断正在进行的业务运营。 在初始化过程中,执行以下任务:
在系统被更新后,新节点主机上的新节点实例已经可以使用:
最后一步就是重新分布表数据。 使用gpexpand schema中的扩容控制表作为指导,重新分配表。 对每一个表完成重分布,扩容也就完成:
重新分布数据是一个长时间运行的处理,它会创建大量的网络和磁盘活动。 可能需要数天时间来重新分布某些非常大型的数据库。 为了最小化这些活动对业务操作的影响,系统管理员可以随意或者根据一个预定好的计划暂停并且继续扩容活动。 数据集也可以被定义优先级,这样关键的应用可以从扩容中首先获益。
在典型的扩容操作中,用户需要用不同的选项运行gpexpand工具四次:
gpexpand -f hosts_file
gpexpand -i input_file
gpexpand -d duration
在初始化时,gpexpand增加并初始化新节点实例。 必须运行gpexpand在新增节点实例上重分布数据来完成系统扩容。 取决于系统的大小和规模,重新分布可能在一个单一会话中经过数个利用率较低的小时才会完成,或者用户可以把该处理划分成一个长时段上的批处理。 每个表或分区在扩容期间是无法进行读写操作的。 由于每一个表都会被重新分布在新的实例上,数据库性能应该会逐步提升直到超过扩容前的性能水平。
gpexpand -c