GP通过PXF远程读取其他GP集群测试研究

研究背景

相关项目人员因业务特点,需要在本地GP集群中使用PXF读取其他GP集群的表数据。

测试数据

使用标准TPCH工具生成300G数据,并导入远端GP集群(以下称为集群1)
数据生成/导入步骤:

  1. 使用dbgen产生一些测试数据, -s 表示scale(单位为GB),根据需要测试的数据量指定:
./dbgen -s 300 -f
  1. 将测试数据转换为postgresql识别的格式,删除末尾的分隔符|。
for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done
  1. 使用dss路径下的SQL脚本创建表并导入数据

PXF配置

使用的PXF版本为5.14.0,由于目前没有连接GP的专属配置,故在本地GP集群(以下称为集群2)使用连接postgresql 的JDBC协议去连接集群1的master节点。
PXF配置过程:

  1. 修改.bash_profile
    将以下内容添加到.bash_profile中,保存退出后,执行该文件。
PXF_CONF=$HOME/greenplum-pxf
export PXF_CONF
  1. 在数据库中创建pxf extension
database-name=# CREATE EXTENSION pxf;
  1. 在.bashrc中配置JAVA_HOME
    可以使用以下命令查找JAVA_HOME
java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'

每个节点都需要配置,并且路径需要相同。(如果实际路径不同可以考虑使用软连接)

  1. 配置JDBC xml文件
    在$PXF_CONF/servers路径下创建新路径jdbc-test,将$PXF_CONF/templates/jdbc-site.xml拷贝到$PXF_CONF/servers/jdbc-test下。修改其中参数如下:
    在这里插入图片描述
  2. 同步到其他数据库节点
pxf cluster sync
pxf cluster stop
pxf cluster start
  1. 建立PXF协议外部表后,即可查询

注意:使用JDBC协议的外部表进行查询时,会连接本地数据库,并且连接地址是localhost:5432。如果本地数据库的master节点端口不是5432,则会报错。目前并未找到可以配置本地端口的地方。查看pxf源码后,在java代码中有默认端口5432,但是首先会寻找$PGPORT。在环境中已经配置了$PGPORT为其他端口的情况下还是会连接localhost:5432报错,目前还未找到原因,只能通过部署时指定端口为5432解决。

测试1

原计划测试TPCH所有的22条SQL语句,由于第一条语句执行完后就有着很大性能差异,故只研究第一条SQL(1.sql)执行情况。

  1. sql内容
    在这里插入图片描述
    说明:该SQL只涉及lineitem表,lineitem表总行数1799989091,1.sql中where条件过滤后的行数为1787132296。

集群1执行情况:
在这里插入图片描述执行时间:1192259.789 ms (20min)

集群2执行情况:
在这里插入图片描述上图中椭圆框是我加入的内容。根据执行计划看,External Scan的确只扫描了过滤后的行,但是时间过长,占据了执行的大部分时间。使用sar工具监控网络流量,在External Scan期间,网络接收速度稳定在3800 rxkB/s左右,计算接收的数据大约在67G。
在这里插入图片描述注:生成lineitem.csv时,文件大小约为220G,导入到数据库中的lineitem表大小为296G,本次扫描过滤的行数为总行数的99.3%。

测试2

在上一步测试中,由于在集群2中查询的时间大部分消耗在External Scan,故修改1.sql,将where条件过滤后的行数降低。

  1. sql内容(修改)
    在这里插入图片描述
    说明:该SQL只修改了where条件后的语句,1.sql(修改)后的where条件过滤后的行数为18656,约为总行数的0.001%。

集群1执行情况:
在这里插入图片描述执行时间:195238.412 ms

集群2执行情况:
在这里插入图片描述执行时间:196321.784 ms

可以看出在过滤了绝大部分行数后,集群1与集群2的执行时间几乎相同。

网络传输分析

在测试1中,External Scan阶段时的网络接受速度稳定在3800 rxkB/s左右,并持续了约5个小时,直至External Scan结束。为测试网速上限,从集群1节点上scp一个压缩包至集群2节点。传输时,集群2的网络接收速度稳定在约120000 rxkB/s,这与集群上配置的千兆交换机相符。
在这里插入图片描述在集群1节点上创建大量小文件,将其scp至集群2节点,发现集群2的网络接收速度大幅降低。当小文件在2KB左右时,网络接收速度与External Scan时相近。
在这里插入图片描述

执行分析

本次测试的SQL包含order by子句,在external scan的过程中,数据库的2个节点都存在网络的收发与磁盘的写入,并且在segment节点的base路径下存在pgsql_tmp路径,其中包含名称类似为pgsql_tmp_Sort_1_278098.0的文件,共在3个segment下发现此类文件(共4个primary segment),大小分别约为41G,21G,21G。这与执行计划中的“Sort Method: external sort Disk: 62445760kB”与“ort Method: external merge Disk: 21377408kB”相符合。

总结

  1. GP集群间使用PXF连接时,只有master之间存在数据传输,查询时需要将过滤后(需要开启谓词下推)的数据通过其中一个集群的master节点传输至另一个集群的master节点
  2. External Scan阶段传输的可能是大量小文件,导致传输速度过慢,无法发挥交换机的最大性能
  3. 当External Scan阶段的数据较大,sort阶段会写磁盘,导致性能降低
  4. 根据GP厂家解释,目前GP集群之间没有并行连接的工具,计划未来会推出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值