Greenplum 6 新功能 在线扩容工具GPExpand (转载)
Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力。Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布。因为集群大小已经改变,所以重分布之前要先将所有哈希分布表改成随机分布,然后再按照新的集群大小重新计算哈希值并重新分布。
所以,旧的扩容技术存在如下几个问题:
1. 需要停机,集群无法在扩容期间提供服务。
2. 数据重分布过程集群性能差。随机分布表因为不能确定数据分布规律,无法对查询做优化。
3. 虽然表的重分布可以并行进行,但是扩容过程中因为额外记录了每个表的更新状态,在对表做完重分布后要更新状态表。Greenplum 6版本之前表的更新操作只能串行。所以对大量小表做并行重分布的时候会因为状态表更新的串行化产生瓶颈。
全新设计的gpexpand支持在线扩容,同时对数据重分布过程做了优化,提高了并发度。整个扩容分为两个阶段:
1. 在线增加新节点
2. 数据重分布
如何在线增加新节点
Greenplum通过catalog表gp_segment_configuration维护集群节点信息。所以在线增加节点并不复杂,只要更新这个系统表即可:首先以master数据库目录为模板创建新的子节点,然后更新gp_segment_configuration表。新节点没有用户数据,只有catalog数据,这些数据在master节点上都有。
因为是在线扩容,这里有几个问题:
1. 新节点加入后,哈希分布的数据表还是按照旧集群的大小进行哈希分布。对这样的表怎么处理
·正在运行的事务
·新事务
2. 扩容过程中,catalog更改操作(建表,删表,改表)如何处理
问题 1
为了解决这个问题,我们在catalog表gp_distribution_policy里引入了一个新的属性,numsegments。它描述了该表分布在哪些节点上,n表示分布在前n个节点上。同时优化了执行查询的工作进程的数量管理策略,可以指定在哪些节点上启动执行查询工作进程。所以,即使集群添加了新节点,但是未数据重分布的表仍然只分布数据在集群的旧节点上,并且分布策略不变。所以,无论是正在运行的事务,还是新事务,如果numsegments没有改变,则查询执行进程依然只运行在集群的旧节点上,新节点上没有工作进程。
对于新创建的表,则会获取最新集群大小,应用到所有节点上,numsegments值与最新集群大小相同。对该表执行的DML操作,也会应用到所有节点上。
问题 2
扩容期间如果catalog发生变化,则会导致不一致:catalog的变化只应用到了老节点,和新节点上的catalog数据不一致。
为了保证扩容期间catalog的一致性,Greenplum 6引入了catalog锁,在增加新节点阶段,防止对catalog执行修改操作。新节点加入到集群后,该catalog锁被释放。通常添加新节点操作比较快,所以对catalog操作的影响不大。
对于只存在于master上catalog表,如gp_segment_configuration、pg_statistic等,新加入的数据节点会做适当的清理。
数据重分布
表的重分布过程就是将表的数据从旧的集群节点,重新分布到新的集群节点上。重分布后更新numsegments,之后的所有事务会按照新的分布来处理了。在重分布过程中会对表加ACCESS_EXCLUSIVE_LOCK锁,所有对表的操作都会被阻塞。完成某张表的数据重分布后,操作该表的SQL将被调度到集群的所有新旧节点上执行。
重分布的优化
哈希分布计算方法虽然简单,但是在重分布的过程中,由于集群大小发生了变化,需要按照新的集群节点数目重新计算哈希,数据几乎要完全重新分布,移动数据量巨大,导致重分布过程效率较低。假设原来有N个节点,每个节点上分布1/N的数据,扩容后M个节点,每个节点上分布1/M的数据。理想的情况是,每个旧节点移动出1/N - 1/M的数据到新节点上,从而整体移动量是N(1/N - 1/M) = 1 - N/M。
Greenplum 6采用了一种叫做Jump Consistent Hash的一致性哈希算法。
该算法有如下特点:
1. 均匀性:通过概率做到均匀分布。
2. 稳定性:在相同集群大小下,同一个Tuple每次计算结果相同。
3. 单调性:扩容过程中,旧节点之间没有数据迁移。
4. 高效性:对于集群大小为N的时候,时间复杂度为Log(N)。
更多算法细节请参考链接。https://arxiv.org/pdf/1406.2294.pdf
重分布的并行化
在Greenplum 5上,HEAP表的更新删除操作是最高级别的锁,相当于完全是串行化。做数据重分布的过程中,要在一张HEAP表中记录数据库中每个表的重分布状态,所以在做数据重分布的过程中,虽然做了并行化,但是更新状态表的时候仍然是串行的。即使更新状态表的操作很短暂,对于大量小表的并行重分布依然会成为瓶颈。在Greenplum 6里,因为增加了分布式死锁检测,所以更新删除表的锁级别已降低,支持并发更新删除操作。对于大量小表做并行重分布性能提升明显。
重分布期间对查询性能的影响
重分布过程中,不可避免的会存在某些表已经重分布完毕、某些表还未做重分布。对于处于相同分布状态的表,在分布列上做JOIN查询,不需要做数据重分布;否则,需要进行数据重分布。
FAQ
1. 如何控制哈希分布算法
通过GUC gp_use_legacy_hashops 可以控制,默认是Jump Hash算法。
2. 扩容过程中新旧节点的catalog是一致的吗
catalog始终是一致的,新节点上即使还没有数据,但是catalog也是存在的。
3. 扩容过程中对于其他查询的影响
因为是在线扩容,期间不会中断正在运行的所有查询,只是在增加新节点的时候因为要锁catalog,所以在此期间不支持DDL,加完新节点立即释放catalog锁。
在数据重分布的时候因为加了最高级别的锁,对正在重分布的表的访问会阻塞。
Greenplum 6 新功能 在线扩容工具GPExpand (转载)的更多相关文章
- 即将到来的Autodesk 主要产品2015版 产品和API新功能在线培训(免费)
一年一度的Autodesk主要产品和API在线培训课程在5月份即将開始.我们呈献给大家5个课程. 1. Revit 2015 产品新功能及API 概览 2. Vault 2015产品新功能及API 概 ...
- mysql5.6新功能索引条件下推(转载)
原文地址:http://www.cnblogs.com/zengkefu/p/5684101.html 一什么是"索引条件下推" "索引条件下推",称为 Ind ...
- ArcGIS中国工具3.2新功能
ArcGIS中国工具3.2新功能 1. 增加属性格式刷, 2. 编辑自动保存,每5分钟保存一次
- Linux下lvm在线扩容步骤
转 :https://jingyan.baidu.com/article/25648fc18f22b29191fd0011.html 图片看不清可以看原文 LVM是逻辑盘卷管理(Logical Vol ...
- MySQL 5.7 Replication 相关新功能说明
背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- SCVMM之Windows Server2012 R2新功能
在Windows Server 2012 R2中可以通过使用共享的虚拟硬盘VHDX文件的方法来模拟IP SAN,来为虚拟机创建群集提供共享存储.这样为虚拟机创建群集时就不用再像以前一样通过使用软件模拟 ...
- 推荐十款非常优秀的 HTML5 在线设计工具
网络有很多优秀的设计和开发工具可能大家都不知道,因此这篇文章就向设计师推荐十款优秀 HTML5 在线工具,这些工具能够帮助设计师们设计出更有创意的作品.随着 HTML5 技术的不断成熟,网络上涌现出越 ...
- Windows Server 2012 R2里十个极好的新功能
Windows Server 2012 R2具备的众多新特点大大的增强了操作系统的功能性,同时也是在Windows Server 2012原有功能上的拓展.这里整理出Windows Server 20 ...
随机推荐
- Python全栈开发相关课程
Python全栈开发 Python入门 Python安装 Pycharm安装.激活.使用 Python基础 Python语法 Python数据类型 Python进阶 面向对象 网络编程 并发编程 数据 ...
- 怎么删除json 键值对
var obj = { 'id': 1, 'name': 2 } delete obj.id delete obj['id'] console.log(obj) //{ 'name': 2 }
- 词汇AFFRIKE非洲AFFRIKE英语
affrike 英文单词,含义是非洲,非洲大陆. 中文名:非洲 外文名:affrike 目录 释义 affrike noun名词 非洲,也用做africa 1.Word Origin and Hist ...
- 【简解】SP7556 Stock Charts
题目大意 给出一个折线图,有N条线段,你想要把这些线段分成几个集合,使得每个集合中任意两条线段不相交. 求最少集合数. 分析 喵帕斯:以下提及的所有折线均指横坐标在\([1,k]\)里的折线段. 思考 ...
- C# vb .net实现马赛克焦距像素化特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的马赛克焦距像素化效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置 ...
- Mysql中use filesort的误区
误区一字面误区 use filesort排序,字面上理解是外部排序. 误区二人云亦云 百度上多被大家否定不是外部排序,认为和file这个关键字没关系.用的是快速排序.但是总觉得不可能这么无缘无故叫fi ...
- 【转载】C#中使用int.Parse方法将字符串转换为整型Int类型
在C#编程过程中,很多时候涉及到数据类型的转换,例如将字符串类型的变量转换为Int类型就是一个常见的类型转换操作,int.Parse方法是C#中专门用来将字符串转换为整型int的,int.Parse方 ...
- MySQL CentOS7 手动安装
手动安装MySQL的目的: 1.一个服务器上可以同时装多个版本,甚至相同版本MySQL的多个实例,这种需求很常见: 2.一次初始化和配置后,可以快速复制到本服务器或其他服务器,及封装为初始MySQL的 ...
- Word2Vec算法简介
一.简介 word2vec是Google在2003年开源的一款将词表征为实数值向量的高效算法,采用的模型有CBOW[Continuous Bag-Of-Words 连续的词袋模型]和Skip-Gram ...
- es截取指定的字段返回
SearchResponse response = client.prepareSearch(index_name).setTypes("lw_devices") .setFrom ...